我是从Zed Shaw学习Python的艰难之路书中学习python而且我写了这段代码:
def bear_room():
print "There is a bear here."
print "The bear has a bunch of honey."
print "The fat bear is in front of another door."
print "How are you going to move the bear?"
bear_moved = False
while True:
next = raw_input("> ")
if next == "take honey":
dead("The bear looks at you then slaps your face off.")
elif next == "taunt bear" and not bear_moved:
print "The bear has moved from door. You can go through it now."
bear_moved = True
elif next == "taunt bear" and bear_moved:
dead("The bear gets pissed off and chews your leg off.")
elif next == "open door" and bear_moved:
gold_room()
else:
print "I got no idea what that means."
然而,我想知道为什么他使用" bear_moved = False"因为我跑了几次这个节目并且使用了嘲讽熊而且我总是得到#34;熊已经离开了门。你现在可以通过它。"那么第二个嘲讽熊的意义是什么?#34;部分代码?
非常感谢任何帮助。
答案 0 :(得分:2)
这是因为在这一行中正在读取变量bear_moved
(检查为假):
elif next == "taunt bear" and not bear_moved:
这意味着它被引用。在分配变量之前,您无法引用该变量。因此,请输入>taunt bear
两次,程序将转到dead
,程序会以给定的消息退出。
尝试删除该行,您将看到以下错误:
Traceback (most recent call last):
File "c:\Users\user\Documents\test.py", line 28, in <module>
bear_room()
File "c:\Users\user\Documents\test.py", line 18, in bear_room
elif next == "taunt bear" and not bear_moved:
UnboundLocalError: local variable 'bear_moved' referenced before assignment
说明了我们上面讨论过的内容。在学习编程时,实验是最好的方法。
答案 1 :(得分:0)
我从未读过这本书,但这就是我假设正在发生的事情。
"The fat bear is in front of another door."
所以熊在它的原始位置(在门前)并且还没有移动,如bear_moved = False
当你嘲笑熊时,熊会从门上移开,如下所示:
elif next == "taunt bear" and not bear_moved:
print "The bear has moved from door. You can go through it now."
bear_moved = True
由于它不再处于原始位置,因此熊已移动,因此我们设置了bear_moved = true
。
现在,如果用户在bear_moved = true
期间再次嘲讽熊,熊会做其他事情:
elif next == "taunt bear" and bear_moved:
dead("The bear gets pissed off and chews your leg off.")
请注意,在第一个elif中,它表示"taunt bear" and not bear_moved
,而在下一个elif中,它表示"taunt bear" and bear_moved
。第一个是检查熊是否没有移动,另一个是检查熊是否已经移动。
希望这会有所帮助:)
答案 2 :(得分:0)
它们是两个不同的声明,有两个不同的参数。其中一个人说,如果熊和熊移动然后做一些事情,这只会做一些事情,如果熊DID移动并且你转向他,但是另一个人只会做一些事情,如果熊没有移动并且你盯着他。得到它,他们是两个不同的东西,因为如果他不动,一个人会离开,如果他移动,一个人会离开。