3

割り当てを変更する前に if ステートメントを使用する方法を理解しようとしています。このスクリプトのポイントは、テーブルからナイフを取るように求めるプロンプトが表示される前に、ナイフが取られているかどうかを確認することです。すでに受けている場合は、テーブルに戻って別の応答を得ることができるようにするためです. 私は何を間違っていますか?

def table ():
    if knife_taken == False:
        print "it's an old, brown wooden table, and atop it you find a knife"
        print "Will you take the knife or go back?"
        knife = raw_input ("> ")
        if knife.strip().lower() in ["back", "b", "no"]:
            basement2()
        elif knife.strip().lower() in ["take knife", "knife", "yes", "k"]:
            knife_taken = True
            print "You now have the knife, good, you are going to need it"
            raw_input()
            basement2()
        else:
            print "I did not understand that."
            raw_input()
            table()
    else:
        print "There's nothing on the table"
    raw_input()
    basement2()
4

1 に答える 1

5

基本的に、関数内の変数 knife_taken を変更すると、あるlocalレベルで変更されます。これは、関数が終了すると変更が失われることを意味します。これを修正するには 2 つの方法がありますglobal(ただし、これは悪い方法です)。

global knife_taken
knife_taken = True

または、関数からナイフの状態を返すことができます

return knife_taken

# later on
kitchen(knife_taken)

それを変数に格納し、後で引数としてキッチンに戻します

または、少しおまけとして、ゲームの状態をディクショナリに保存できます。その後、ゲームの状態が変化したときに辞書を更新できます。

game_state = {}

game_state['knife_taken'] = False

def kitchen():
    if not game_state['knife_taken']:
        print "Take the knife!"
        game_state['knife_taken'] = True
    else:
        print "Nothing to see here."

kitchen()
kitchen()
于 2012-12-02T16:53:08.473 に答える