在我继续前进之前,我试图了解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
这就是我要求澄清的一点。
提前致谢。
答案 0 :(得分:1)
要使分支进展,该语句必须在其条件下为真。
如果您输入嘲讽熊,则表示首先为真。
在第二部分(“和”的另一侧)“ not bear_moved”中,这也必须评估为true。布尔值表示如果bear为false且使用了'not',则为true。基本上读为bear = true。
现在分支有2个正确的条件。
认为困惑来自认为熊已经移动了。实际上,这只是一个变量,您可以在其中存储单词false直到更改它。分支机构所希望的只是一间洁净的真理之屋。不能将false更改为true。
答案 1 :(得分:0)