学习Python艰难的方式ex35熊房

时间:2018-05-24 18:43:19

标签: python while-loop branch python-3.5

在我继续前进之前,我试图了解Learn Python the Hard Way示例中的一段特定代码。

根据本书的要求,我一直在编写一条评论,而不仅是代码的每一行(或一部分),以打破正在发生的事情,这样我就可以测试我对发生了什么事。

我在while循环中使用了一些分支逻辑时遇到了一些麻烦,我将在其中发布(我发布了一个修改后的版本,应该有助于显示我所做的事情)一直在努力确保我理解事情。

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 # default status of bear


while True:
    bear_loop_counter = 0
    choice = input("bear room input>  ")

    if choice == "take honey":
        dead("The bear looks at you and slaps your face off.")

    elif choice == "taunt bear" and not bear_moved:
        print("The bear has moved from the door.")
        print("You can go through it now.")
        bear_loop_counter += 1
        print("The bear room loop has iterated",bear_loop_counter, "time.")
        bear_moved = True
    elif choice == "taunt bear" and bear_moved:
        dead("The bear gets pissed off and chews your leg off.")
    elif choice == "open door" and bear_moved:
        gold_room()
    else:
        print("I got no idea what that means")

正如您所看到的,我实现了一些用于调试的内容,包括将输入提示更改为显示我正在处理的代码块的内容,以及显示通过循环I&C的数量的计数器。 #39;已制作。

我试图理解代码片段:

elif choice == "taunt bear" and not bear_moved

我知道这个while循环基本上等着你进入一个将退出循环的分支(dead()或其中一个other_room()位)。我也知道默认"状态"熊是" not_moved"并且" taunt_bear"分支机构将改变熊的状态。我没有得到"而不是"这部分代码的一部分。

我的理解是:

bear_moved = False

在我看来,这意味着"而不是be_moved"将被解释为"而不是bear_moved(False)"反过来会读取"和bear_moved(True)"如果你要简化那个逻辑。所以,用简单的英语写作,"如果你选择嘲讽熊,并且熊被移动,执行一些打印声明......增加计数器等等。"显然,这不是代码的工作原理。我可以从我的柜台看到,只是运行程序,"而不是"声明不起作用,我刚刚解释过。

我想我在编写代码时假设bear_moved由ME设置为False。我可以理解它做它做的事情,如果Python假设bear_moved为True或其他东西。我在想:

bear_moved = False

因此:

not bear_moved == True

这就是我要求澄清的一点。

提前致谢。

2 个答案:

答案 0 :(得分:1)

要使分支进展,该语句必须在其条件下为真。

如果您输入嘲讽熊,则表示首先为真。

在第二部分(“和”的另一侧)“ not bear_moved”中,这也必须评估为true。布尔值表示如果bear为false且使用了'not',则为true。基本上读为bear = true。

现在分支有2个正确的条件。

认为困惑来自认为熊已经移动了。实际上,这只是一个变量,您可以在其中存储单词false直到更改它。分支机构所希望的只是一间洁净的真理之屋。不能将false更改为true。

答案 1 :(得分:0)

此处not bear_moved表示bear_movedFalse

引用the python doc

  

如果参数为false,则运算符不产生True,否则返回False。