Python中if判断列表元素时为何无匹配仍返回True?
问题分析
先看你的代码条件:
if 99 and 98 or 97 and 96 in o:
Python里运算符优先级是:in > and > or,这个条件会按以下顺序求值:
- 先计算
96 in o:96不在列表o里,结果是False - 计算
97 and False:非零整数在布尔判断里属于真值,True and False结果为False - 计算
99 and 98:两个都是非零整数(真值),and运算返回最后一个真值,也就是98(依然是真值) - 最后计算
98 or False:or运算只要有一个是真值就返回真值,结果为98(布尔判断为True)
所以整个条件的布尔值是True,自然会执行print("j")。
关于“加括号并加in o后结果依然相同”的疑问
如果你的写法是类似(99) and (98) or (97) and (96 in o),这和原代码的优先级没区别,结果当然一样。但如果是正确的每个值都判断in o,应该写成:
if (99 in o) and (98 in o) or (97 in o) and (96 in o):
此时四个判断都是False,False and False是False,False and False也是False,False or False是False,条件不成立,不会打印j。如果这么写了结果还是j,大概率是代码没保存或者运行的是旧版本代码,和VSCode编辑器本身没关系。
内容的提问来源于stack exchange,提问作者STOOKI
相关产品推荐
相关产品推荐

