如何使函数更改其他函数的True / False语句

时间:2013-03-13 16:26:44

标签: python

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

来自sys import exit

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_语句? 〜

2 个答案:

答案 0 :(得分: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()

然而!

这通常是不好的风格,特别是对于这样一个简单的情况。这使得更难以推断出你的功能如何运作,它们的变化以及顺序是什么。

根据需要从函数返回TrueFalse会更容易,更易读,也更简单。

如果您试图将您的功能视为具有输入的“黑匣子”并保证某些输出,则通常有助于避免可能出现的许多混乱错误。

答案 1 :(得分:0)

您需要在函数room_1()

之外声明done_1和done_2作为全局变量