Python判断变量不等于两个指定字符串时or逻辑错误如何解决
问题成因
你修改后的判断条件存在布尔逻辑错误,没有正确应用条件取反规则,我们可以逐场景拆解错误条件chosen != "1" or chosen != "2"的运行结果:
- 输入为
"1"时:"1" != "1"结果为False,"1" != "2"结果为True,False or True最终为True,进入非法输入分支 - 输入为
"2"时:"2" != "1"结果为True,or逻辑只要有一个条件为真就会直接返回True,仍然进入非法输入分支 - 输入为其他任意内容时:两个不等判断全为True,结果还是True
由于一个字符串不可能同时等于"1"和"2",所以两个不等判断用or连接时,永远至少有一个条件成立,整个if判断恒为真,自然永远无法触发else分支。
底层逻辑规则
你最初的合法输入判断逻辑是「输入值等于1 或者 输入值等于2」,要对这个整体条件取反得到非法输入判断,需要遵循德摩根定律:
对逻辑表达式
(A 或 B)整体取反,等价于(非A 且 非B),而非(非A 或 非B)
你之前的修改只把相等判断换成了不等判断,没有同步把逻辑连接词or换成and,才导致逻辑恒真的bug。
正确实现写法
如果要优先处理非法输入分支,只需要把错误条件里的or替换为and即可:
chosen = input() if chosen != "1" and chosen != "2": print("Please choose between 1 or 2.") else: print("Okay")
更推荐用成员运算符写判断,可读性更强,也不容易出现逻辑连接词用错的问题:
chosen = input() if chosen not in ("1", "2"): print("Please choose between 1 or 2.") else: print("Okay")
内容的提问来源于stack exchange,提问作者Gauweed International
相关产品推荐
相关产品推荐

