2

突然動作を停止したPythonスクリプトを作成しました。理由はわかりませんので、助けていただければ幸いです。コンソールには何も表示されません。関数startを一番下から呼び出しましたが、うまくいきませんでした。

import random

year = 1
our_score = 0
their_score = 0
games_played = 0

#opponent's strategy:
def op_strategy():
    for i in range (0,1):
        rand = random.randint(0,1)
    if rand == 0:
        return "war"
    if rand == 1:
        return "peace"


def start():
    global our_score, their_score, year
    print "====="
    print "Year " + str(year)
    print "Our Score: " + str(our_score)
    print "Their Score: " + str(their_score)
    print ""
    strategy = raw_input("What is your strategy this year? ")
    inputs(strategy)

def inputs(strategy):
    our_score = 0
    global our_score, their_score, year
    if str(strategy) == "peace" or str(strategy) == "war":
        print "You chose: " + str(strategy)
        op_strat = str(op_strategy())
        print "They chose: " + op_strat
    if str(strategy) == "war" and str(op_strat) == "war":
        print ">>> Everyoner to arms!"
        our_score = our_score + 1
        their_score = their_score + 1
        year = year + 1
    elif str(strategy) == "peace" and str(op_strat) == "peace":
        print ">>> Peace for everyone!"
        our_score = our_score + 3
        their_score = their_score + 3
        year = year + 1
    elif str(strategy) == "peace" and str(op_strat) == "war":
        print ">>> They crushed us!"
        our_score = our_score
        their_score = their_score + 5
        year = year + 1
    elif str(strategy) == "war" and str(op_strat) == "peace":
        print ">>> We crushed them!"
        our_score = our_score + 5
        their_score = their_score
        year = year + 1
    if str(year) == "11":
        print "====="
        print "Final"
        print str(our_score)
        print str(their_score)
        if our_score > their_score:
            print ">>>>> We win! <<<<<"
        if their_score > our_score:
            print ">>>>> They win! <<<<<"
        if their_score == our_score:
            print ">>>>> It's a tie! <<<<<"
        play = raw_input("Play again?")
        if play == "y":
            start()
        if play == "n":
            pass
        else:
            play = raw_input('Invalid response. Please enter "y" or "n".')
    if str(strategy) != "peace" and str(strategy) != "war":
        strategy = raw_input('Invalid strategy. Enter "peace" or "war": ')
        inputs(strategy)
    start()
start()
4

2 に答える 2

2

コードは実行されていますが、raw_input 呼び出しでスタックし、完了するまで印刷されません。もちろん、何も印刷されていないため、ユーザーはこれを行うことを知りません。
バッファは自動的にフラッシュされません。-u オプションを指定して python を起動すると、バッファーは raw_input 呼び出しでフラッシュされ、プロンプトが表示されます。

于 2012-07-17T23:53:48.887 に答える
1

これをIdleでロードすると、次のエラーが表示されます。

SyntaxError: グローバル宣言の前に名前 'our_score' が割り当てられています (1 行目)

次の行の 1 つ:

def inputs(strategy):
our_score = 0
global our_score, their_score, year

詳細はこちら:

If the global statement occurs within a block, all uses of the name 
specified in the statement refer to the binding of that name in the top-level
namespace... i.e. the namespace of the module containing the code block

ローカル変数に割り当てたour_name後、同じ名前のグローバル変数を使用するように関数に指示しています。これを修正した後、問題はないはずです。

于 2012-07-17T23:41:44.730 に答える