简单表达式运算结果的疑惑

学习运算符时遇到一个这样的表达式:

img

这两个表达式按运算符优先级进行运算,按True==1和False==0,结果应该都是True吧,可是这里怎么会不同呢?
有人给咱解解惑吗?谢谢

解析:
一、我们先把两个不同结果的表达式写出来:

5+2>3==2**0
(5+2>3)==2**0

二、然后进行简化,由于**的优先级比==高所以以上两个表达式可以等价为:

5+2>3==1
(5+2>3)==1

三、对于第一个表达式,+号优先级最高,同理表达式2括号中的表达式也是+号优先级较高,所以又可以等价为:

7>3==1
(7>3)==1

好了到这里,运行上面的表达式,结果如下:

img


所以博主的问题就变为7>3==1和(7>3)==1为什么不是都是True


经过查阅资料,发现Python支持连续的比较运算符:a > b == c,但它其实是 a > b and b == c 的简略写法,而不是表示先进行计算 a > b ,然后用结果判断是否等于c,也不是判断a是否大于 b == c 的结果。


所以7>3==1应为7>3 and 3==1 为False。

参考阅读:https://blog.csdn.net/weixin_39793434/article/details/110025611

该回答引用ChatGPT

这两个表达式在计算时的区别在于:

第一个表达式 5+2>3==20 中,运算符 > 的优先级比 == 要高,所以先计算 5+2>3,得到结果为 True,再计算 True == 20,由于 20 等于 1,所以最终结果为 False。
第二个表达式 (5+2>3)==2
0 中,括号的优先级最高,所以先计算括号内的部分 5+2>3,结果为 True,然后再计算 True == 20,由于 20 等于 1,所以最终结果为 True。
因此,这两个表达式的结果是不同的。