Python编写简单汽车游戏时布尔变量条件判断逻辑疑问
Python布尔条件判断核心规则
理解偏差的核心是搞错了if语句的判断逻辑:Python中if后接的内容会被求值为布尔值,只有求值结果为True时才会进入对应分支,和“变量的赋值动作是否成立”没有任何关系:
- 单独写
if 变量名,完全等价于if 变量名 == True:判断变量当前存储的值是否为真 - 写
if not 变量名,完全等价于if 变量名 == False:对变量当前存储的值取反,取反结果为真(也就是变量本身值为假)时进入分支
汽车游戏代码逻辑逐段拆解
初始状态started = False的设定是正确的,代表车辆当前未启动,和现实逻辑一致。
start命令分支逻辑
if command == 'start': if started: # 能进这个分支,说明started当前值为True,也就是车已经处于启动状态 print('Car already started!') else: # 能进这个分支,说明started当前值为False,也就是车还没启动 started = True # 把车辆状态更新为已启动 print('Car started')
之前对if started的理解完全反了:它不是判断“started被赋值为False这个事成立”,而是直接读取started的当前值做真假判断——值是True就进分支,值是False就跳过。
stop命令分支逻辑
elif command == 'stop': if not started: # not会对started的当前值取反:如果started是False,取反后是True,就进这个分支 # 也就是车当前本来就是未启动状态,按停止就提示已经停了 print('Car already stopped!') else: # 如果started是True,not True结果是False,跳过上面的提示分支 started = False # 把车辆状态更新为未启动 print('Car stopped')
对if not started的误解,本质是把“对变量值取反”和“对赋值语句取反”搞混了:not只会作用于started当前存的布尔值,不会管之前给它赋过什么值。
实际运行流程示例
- 程序刚启动:
started = False(车未启动) - 第一次输入
start:判断if started,此时值为False,走else分支,把started改为True,输出Car started - 第二次输入
start:判断if started,此时值为True,进入分支,输出Car already started! - 第一次输入
stop:判断if not started,此时started是True,not True为False,走else分支,把started改为False,输出Car stopped - 第二次输入
stop:判断if not started,此时started是False,not False为True,进入分支,输出Car already stopped!
内容的提问来源于stack exchange,提问作者meldelduk
相关产品推荐
相关产品推荐

