4

我想首先在这里询问这个问题。这是在 codeacademy.com 上作为练习的一部分给我的,让我在一个小时的大部分时间里感到困惑。

看看下面的代码块:

bool_one = 40 / 20 * 4 >= -4**2

现在,我将其评估为“8 >= 16”,这是错误的。

但是,codeacademy.com 终端说这是真的。当我开始编写调试代码行时,我发现问题在于如何评估“-4**2”。当我在 CodeAcademy 的终端以及我的本地 linux 系统上运行它时,Python 中的“-4**2”变成“-16”......这与我在所有数学课中学到的一切都相反以及我运行过的每一个计算器。无论我将它作为“-4 * -4”还是“-4^2”运行,甚至使用“x^y”键“-4 [x^y] 2”,它仍然显示为“16” . 那么,python 是如何为“-4**2”提供“-16”的呢?

有人可以为我澄清一下吗?

TIA。

4

4 回答 4

6

来自Power Operator的文档:

幂运算符比左侧的一元运算符绑定得更紧密;它的绑定不如右侧的一元运算符那么紧密。语法是:

power ::=  primary ["**" u_expr]

因此,在幂和一元运算符的无括号序列中,运算符从右到左计算(这不限制操作数的计算顺序):-1**2 结果为 -1。

强调我的。

因此,为了获得所需的结果,您需要在 . 周围添加括号-4

>>> (-4) ** 2
16
于 2013-08-07T18:03:45.617 回答
3

如果 -4 不带括号,则负号被认为是一元运算符,本质上是“乘以负数”。(-4)**2将是 16,因为这实际上是负 4 的平方,但-4**2使用正常的运算顺序(乘法之前的取幂)并将其视为-(4**2).

希望有帮助!

编辑:要真正了解运算符优先级,请查看文档中的这个方便的列表:

http://docs.python.org/2/reference/expressions.html#operator-precedence

如您所见,-优先级低于**

于 2013-08-07T18:04:34.193 回答
1

Python 没有将其评估为 (-4)^2,而是将其评估为 -(4^2)。

>>> (-4)**2
16
>>>-4**2
-16
于 2013-08-07T18:03:31.517 回答
0

-4**2 表示 -(4^2)。首先将 4 平方,然后乘以 -1。-1(4^2) = -1(16) = -16。

如果您想要 16 作为答案,那么您必须输入 (-4)**2。

>>> -4**2
-16
>>> (-4)**2
16
于 2013-08-07T18:30:51.113 回答