为什么需要这一特定的代码行

时间:2017-07-21 01:39:09

标签: python python-2.7

我是从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;部分代码?

非常感谢任何帮助。

3 个答案:

答案 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移动并且你转向他,但是另一个人只会做一些事情,如果熊没有移动并且你盯着他。得到它,他们是两个不同的东西,因为如果他不动,一个人会离开,如果他移动,一个人会离开。