Python 3中使用&运算符出现结果与预期相反的问题求助
问题解析:为什么你的Python条件判断结果和预期相反?
嘿,这个问题其实是运算符优先级混淆加上误用按位运算符代替逻辑运算符导致的,我来给你一步步拆解清楚:
首先看你的代码:
a = 20 b = 30 if a == b & a == 20: print("a is equal to b") else: print("a is not equal to b")
你原本想表达的逻辑是:(a等于b) 并且 (a等于20),只要其中一个条件不成立,就执行else分支。但实际结果却和预期相反,核心原因有两个:
1. 误用了按位与&,而不是逻辑与and
&是按位与运算符,它的作用是对两个整数的二进制位进行逐位与操作,不是用来做逻辑条件判断的。而逻辑判断中需要同时满足多个条件时,应该用and运算符。
2. 运算符优先级导致表达式执行顺序偏离预期
在Python中,&的优先级高于比较运算符==,所以你的条件表达式会被Python解析成这样的执行顺序:
- 第一步:先计算
b & a:20的二进制是0b10100,30的二进制是0b11110,按位与后得到0b10100,也就是整数20。 - 第二步:此时条件变成了链式比较
a == 20 == 20,Python的链式比较等价于(a == 20) and (20 == 20),结果是True and True,也就是True。
所以整个条件判断为True,自然执行了if分支,和你预期的逻辑完全相反。
修正后的代码
把&换成逻辑与and,同时可以加上括号明确优先级(虽然Python中and优先级低于==,加括号更清晰):
a = 20 b = 30 if (a == b) and (a == 20): print("a is equal to b") else: print("a is not equal to b")
现在运行代码就会输出a is not equal to b,符合你的预期。
内容的提问来源于stack exchange,提问作者Rahul Kumar
相关产品推荐
相关产品推荐

