如何让函数改变其他函数的真假语句

-1 投票
2 回答
2206 浏览
提问于 2025-04-17 18:57

我遇到的基本问题是这样的:我想做一个简单的游戏,玩家在一个房间里,旁边有两个房间需要先“完成”才能继续。我希望第二个和第三个房间能把我最开始的那些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 个回答

0

你需要把 done_1 和 done_2 声明为全局变量,也就是在函数 room_1() 之外定义它们。

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 会更简单、更清晰,也更容易理解。

如果你把你的函数想象成“黑箱”,也就是说它们有输入,并且保证会输出特定的结果,这样通常能帮助你避免很多可能出现的混乱错误。

撰写回答