Python while循环无法正常终止:特定元组匹配逻辑执行异常问题
问题根因
你编写的while循环条件存在逻辑错误:Python中or为逻辑运算符,会对左右两侧的表达式单独做布尔判定。你当前写的条件START==(1, 0) or (2, 0) or (1, 1) or (3, 2)实际执行逻辑如下:
- 首先判定
START == (1,0)是否为真 - 若上述判定为假,会直接判定
(2,0)的布尔值,而非你预期的START == (2,0) - 所有非空元组的布尔值均为
True,因此整个while循环条件永远为真,程序会陷入无限循环
修复方案
推荐使用更简洁且不易出错的in关键字写法,将所有需要循环的目标值放入集合中做成员判定:
import random START = (random.randrange(0, 4), random.randrange(0, 4)) print(START) # 修复后的循环条件 while START in {(1, 0), (2, 0), (1, 1), (3, 2)}: START = (random.randrange(0, 4), random.randrange(0, 4)) else: print(START)
如果需要沿用or的写法,需要补全每一个相等判定逻辑(该写法冗余易出错,不推荐):
# 仅做逻辑原理演示,不推荐使用 while START==(1, 0) or START==(2, 0) or START==(1, 1) or START==(3, 2): START = (random.randrange(0, 4), random.randrange(0, 4))
内容的提问来源于stack exchange,提问作者Swagdaddymuffin
相关产品推荐
相关产品推荐

