You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中为何‘&’与‘and’运算符结果不同?条件布尔值一致

问题解析:and&导致结果不同的原因

这个问题的核心是运算符优先级差异,这是Python新手非常容易踩的一个坑!我们来一步步拆解你的代码:

and的情况

你的第一个表达式:

x = a if a>b and a>c else b if b>c else c

逻辑与运算符and的优先级低于比较运算符>,所以Python会先分别计算两个比较条件:

  • a>b70>40True
  • a>c70>60True
    再用and合并这两个布尔值:True and TrueTrue,因此条件成立,直接取a的值70,这和你预期的一致。

&的情况

你的第二个表达式:

x = a if a>b & a>c else b if b>c else c

这里的&按位与运算符,它的优先级比比较运算符>要高得多!所以Python会先执行b & a,而不是先计算a>b

  1. 先计算按位与:b=40的二进制是101000a=70的二进制是1000110,按位与的结果是0010000,也就是十进制的16。
  2. 接下来表达式会被解析为(a > (b & a)) > c
    • a > 1670>16True
    • 布尔值True在数值运算中会被当作1,所以True > c1 > 60False
  3. 整个条件a>b & a>c的结果是False,于是进入else分支,判断b>c40>60False),最终取c的值60,这就是你看到的错误结果。

额外提示

如果你非要用&实现类似逻辑与的效果(非常不推荐,逻辑判断就该用and),需要给每个比较表达式加上括号,强制改变运算顺序:

x = a if (a>b) & (a>c) else b if b>c else c

这样会先计算(a>b)(a>c)得到两个True,按位与后结果还是True,就能得到正确的最大值70了。

记住:逻辑判断场景用and/or/not,按位操作(比如处理二进制位)才用&/|/~,它们的功能和优先级完全不同,千万别混用!

内容的提问来源于stack exchange,提问作者Srinivas

火山引擎 最新活动