我想知道哪个决定了输出,在这种情况下,不适用于第一个条件或两者兼而有之

I want to know which determines the output like not in this case applies to first condition only or both

提问人:sana 提问时间:11/4/2023 最后编辑:quamranasana 更新时间:11/4/2023 访问量:25

问:

x=(not (5==5) and (10<12))
print(x)

执行时。不否定第一个表达式或两者兼而有之?

在我看来,“not”应该只用 (5==5) 执行,但我的同事说它会影响括号中的整个表达式,比如 (5==5) 和 (10<12)。

Python 运算符 operator-precedence

评论

0赞 quamrana 11/4/2023
Python 不在乎你的意见,只关心你写了什么代码。你还尝试了哪些其他实验,你能从中得出什么结论?

答:

0赞 fuad ashraful 11/4/2023 #1

你可以按照我使用的方法。而不是,我们可以放置操作来验证答案。结果显示 True 。由于结果为真,因此我们可以说不是 (5==5) 首先适用。如果 not 操作使用 ((5==5) 或 (10<12)) 运行,则最终结果应为 False。希望它有助于理解。

enter image description here

评论

0赞 sana 11/5/2023
谢谢。我也用OR做了,它的工作方式和你说的一样。
0赞 sana 11/5/2023
对不起,我无法理解你的第二句话。>>>不是 0 和 2 2 Python 计算的不是 0,因为它是 True,所以继续通过 and。当你说不是 0 时,为什么这是真的。不应该是假的吗?
0赞 tdelaney 11/4/2023 #2

这一切都归结为操作员优先级。看表,是比所以它先走。所以你是对的,与.notandnot(5==5)

您可以使用更简单的示例进行测试。

>>> not 1 and 2
False

Python 计算过,因为它是 ,它使操作短路。not 1Falseand

>>> not 0 and 2
2

Python 计算并因为它是 True,因此继续通过 .not 0and

>>> not (0 and 2)
True

你同事的预测是错误的。

>>> (not 0) and 2
2

你的预测奏效了!

评论

0赞 sana 11/5/2023
对不起,我无法理解你的第二句话。
0赞 tdelaney 11/5/2023
在 中,python 首先计算了 ,即 。现在表达式是 。由于测试两边都是,它仍然需要评估右边。 正在制作表达式。 并且有点奇怪 - 它们返回最后计算的值,而不是简单的 or . 是最后评估的东西,所以这就是你得到的。not 0 and 2not 0TrueTrue and 2andTrue2TrueTrue and TrueandorTrueFalse2
0赞 tdelaney 11/5/2023
如果你有一个这样的表达方式 - 它有点奇怪。你要么得到,要么得到任何价值。not x and yFalsey