关于《笨办法学Python》Ex35中bear_room分支逻辑的疑问
搞懂
and not布尔逻辑:以《笨办法学Python》bear_room代码为例 嘿,我完全懂你这种布尔逻辑绕晕的感觉!当初我学这段代码的时候也卡过一会儿,咱们一步步把这个逻辑掰明白。
先纠正核心误解:not是「取反」,不是「等于True」
你之前误以为not bear_moved等价于bear_moved(True),这刚好搞反了!not是Python里的布尔取反运算符,它会把原来的布尔值翻转:
- 当
bear_moved = False(初始状态),not bear_moved就等于True - 当
bear_moved = True(比如嘲讽过一次后),not bear_moved就等于False
所以choice == "taunt bear" and not bear_moved的完整意思是:
当你输入的内容是
taunt bear并且 熊当前处于「未移动」状态时,触发这个分支
结合代码场景看逻辑流转
咱们把bear_room里的核心逻辑抽出来,你就能一眼看明白:
bear_moved = False # 初始状态:熊没动 while True: choice = input("你要做什么?> ") # 第一次嘲讽熊:熊还没动过,满足条件 elif choice == "taunt bear" and not bear_moved: print("熊被激怒站起来了!现在可以绕过去拿蜂蜜了。") bear_moved = True # 把状态改成「已移动」 # 第二次嘲讽熊:熊已经动过,not bear_moved变成False,触发这个分支 elif choice == "taunt bear" and bear_moved: print("熊忍无可忍,扑过来咬死了你!") break
流程拆解:
- 第一次输入
taunt bear:bear_moved是False,not bear_moved是True,两个条件都满足,触发第一个分支,同时把bear_moved改成True - 第二次再输入
taunt bear:bear_moved已经是True,not bear_moved变成False,第一个分支条件不满足,转而触发第二个分支,游戏结束
再给你补个简单的布尔取反小例子
直接看值的变化更直观:
not False→Truenot True→Falsenot (1 > 2)→True(因为1>2是False,取反后为True)
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

