-1

这是我遇到麻烦的基本想法:我正在尝试制作一个简单的游戏,您在一个房间中,并且您有 2 个房间从第一个房间开始分支,需要在继续之前“完成”。我希望第 2 和第 3 间房间将我原来True的陈述更改False为在进行游戏之前都需要切换的陈述。

从系统导入退出

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 回答