近日看到python比较运算符之间有优先级>,>=,<,<=的优先级要高于==和!=于是想实验一下,然后跑偏了
print(1>True==False)#False
print((1>True)==False)#True
print(1>(True==False))#True
百思不得其解,第一行代码怎么会输出False,先算大于号得到的是True,先算等号得到的也是True,结果偏偏是False
求解答.
第一个表达式具有二义性,解释器判断不了,所以自动返回了False。
这个输出确实有点怪,能把程序输出以及程序截图给我吗?我帮你看看
问题解答如下所示:
问题标题: Python比较运算符的优先级问题
问题内容: 最近学习到了Python中比较运算符的优先级。据了解,>、>=、<、<= 的优先级比==和!= 高。然而,在我的代码中,第一行结果输出False,而我预期的结果应该是True。我先进行的是大于号运算,结果为True,然后是等号运算,结果同样为True。根据这个顺序,我预期的输出应该是True。请问为何实际结果与我的预期不符?是否可以帮我解答一下这个问题呢?
答案:
根据你的问题描述,我们可以推测你的代码可能类似于以下形式:
x = 5
y = 5
result = x > y == True
print(result)
实际上,Python 中比较运算符的优先级是从左到右进行的,也就是说 x > y == True
这个表达式会先计算 x > y
的结果,再将这个结果和 True
进行比较。
所以在此例中,表达式 x > y
的结果是 False
,因为 5 并不大于 5。接着将 False
和 True
进行比较,结果当然是 False
,即第一行输出的结果为 False
。
如果你想得到你预期的输出 True
,你可以通过添加括号来改变运算的顺序,代码可以修改如下:
x = 5
y = 5
result = (x > y) == True
print(result)
这样修改后的代码会先计算 (x > y)
的结果,即 False
,然后再将 False
与 True
进行比较,得到结果 True
,所以最终第一行输出的结果为 True
。