-1

私が問題を抱えている基本的なアイデアは次のとおりです。1 つの部屋にいて、続行する前に「完了する」必要がある最初の部屋から分岐する 2 つの部屋がある単純なゲームを作成しようとしています。True2 番目と 3 番目の部屋に、元のステートメントをFalse、ゲームを進める前にすべて切り替える必要があるステートメントに変更してもらいたい。

sys インポート出口から

def room_1():
    print "You're in room one, there are two doors to room 2 and 3."
    print "Where do you want to go?"

    done_2=True
    done_3=True

    while True:
        move=raw_input("'room 2' or 'room 3'? >")

        if move == 'room 2':
            room_2()
        elif move == 'room 3':
            room_3()
        else:
            print "not a valid answer"
    print "You Win!"
    exit(0)

def room_2():
    print "You finished room 2!"
    done_1=False
    raw_input('Press button')
    room_1()

def room_3():
    print "You finished room 3!"
    raw_input('press button')
    done_3=False
    room_1()

room_1()

ルーム 2 と 3 内から done_ ステートメントを変更するにはどうすればよいですか? 〜

4

2 に答える 2

4

Python では、代入する前にグローバル変数を宣言する必要があります。そうしないと、代入によってグローバル変数がシャドウされます。

def room_2():
    global done_1  # <- right here
    print "You finished room 2!"
    done_1=False
    raw_input('Press button')
    room_1()

def room_3():
    global done_3 # <- right here
    print "You finished room 3!"
    raw_input('press button')
    done_3=False
    room_1()

でも!

これは、特にこのような単純なケースでは、一般的に悪いスタイルです。関数がどのように機能し、何を変更し、どのような順序で機能するかを判断するのが難しくなります。

True必要に応じて関数から返すか、関数から返す方がはるかに簡単で、読みやすく、簡単Falseです。

関数を、入力を持ち、特定の出力を保証する「ブラック ボックス」と考えようとすると、一般に、発生する可能性のある多くの紛らわしいバグを回避するのに役立ちます。

于 2013-03-13T16:29:37.380 に答える
0

関数 room_1() の外で、done_1 と done_2 をグローバル変数として宣言する必要があります。

于 2013-03-13T16:29:57.360 に答える