Python while循环逻辑异常求助:输入2进循环、输入0却不进
问题出在两个关键错误上!
嘿,别头疼啦,你的代码里有两个很容易踩的小坑,我帮你拆解清楚:
1. 把位运算符&当成了逻辑运算符and
Python里&是按位与运算符,是用来做二进制位运算的,不是用来判断逻辑关系的!而且运算符优先级里&比!=高,所以你的条件var != 1 & var != 2会被Python错误解析成:
(var != (1 & var)) & (var != 2)
代入你遇到的异常情况看:
- 输入
2时:1 & 2二进制运算结果是0,2 != 0为True,2 != 2为False,True & False按位运算后结果为0?不对,这和你说的“输入2进入循环”矛盾?哦不,这还要结合第二个错误来看——你的逻辑条件本身就写反了!
2. 逻辑条件完全不符合需求
你要实现的是「用户必须输入2或3,否则循环提示」,但你的条件写的是var !=1 & var !=2——这意味着“只要var不是1且不是2就循环”,那输入3的时候也会被判定为无效,完全不是你要的逻辑!
正确的逻辑应该是当var不是2也不是3时,才进入循环提示错误,也就是用逻辑与and连接两个判断:
while var != 2 and var != 3:
修正后的完整代码
var = int(input('Select "2" or "3" (Write your answer). ')) while var != 2 and var != 3: var = int(input('Invalid. You have to write "2" or "3". ')) print('You select', var)
再验证你之前的异常场景:
- 输入
2:条件2 !=2 and 2 !=3为False,直接跳出循环打印结果,符合预期。 - 输入
0:条件0 !=2 and 0 !=3为True,会正常进入循环提示错误(原来的错误代码里输入0不循环,完全是&运算符导致的巧合错误结果)。 - 输入
1:现在会进入循环提示错误,这才符合你“只能选2或3”的需求。
根本不是解释器的问题,就是运算符用错+逻辑条件写错啦!
内容的提问来源于stack exchange,提问作者Lisandro Dalla Costa
相关产品推荐
相关产品推荐

