条件判断语句异常:输入非1、2、3时为何循环未正常终止?
问题出在条件判断的写法上!
嘿,我一眼就揪出你代码里的bug了——问题就出在这个条件判断语句上:
if aw in [1,2,3] == False:
为什么这个写法不对?
Python的链式比较规则会把这个表达式解析成:
(aw in [1,2,3]) and ([1,2,3] == False)
而[1,2,3] == False这个判断永远是False,所以不管aw是不是在[1,2,3]里,整个条件的结果都是False。这就导致哪怕你输入1-3之外的数字,也会直接走到else分支执行break,循环直接终止,完全达不到你想要的「输入非法就继续循环」的效果。
怎么修正?
有两种清晰且正确的写法:
- 使用
not in(推荐,更简洁易读):if aw not in [1,2,3]: - 用括号明确优先级,把判断逻辑包裹起来:
if not (aw in [1,2,3]):
修正后的完整代码
while True: try: aw = int(input('Number : ')) if aw not in [1,2,3]: print('give Number again') else: print('correct') break except ValueError: print('please give a number')
现在测试一下效果:
- 输入4:会打印
give Number again,循环继续 - 输入2:打印
correct,循环终止 - 输入字符串:打印
please give a number,循环继续
完全符合你的预期啦!
内容的提问来源于stack exchange,提问作者Ahmet
相关产品推荐
相关产品推荐

