我想先问一下这个问题。这是作为codeacademy.com练习的一部分给我的,让我在一小时的大部分时间里感到困惑。
查看以下代码块:
bool_one = 40 / 20 * 4 >= -4**2
现在,我评估为" 8> = 16"这是假的。
然而,codeacademy.com终端表示它是真的。当我开始编写调试代码行时,我发现问题出在" -4 ** 2"得到评估。当我在CodeAcademy的终端以及我的本地linux系统上运行时," -4 ** 2"在Python中出现了" -16" ...这与我在所有数学课程中学到的所有相反,以及我运行它的每一个计算器。我是否将其作为" -4 * -4"或" -4 ^ 2"甚至,使用" x ^ y"键," -4 [x ^ y] 2",仍然出现为" 16"。那么,python是如何与" -16" for" -4 ** 2"?
有人可以帮我澄清一下吗?
TIA。
答案 0 :(得分:6)
来自Power Operator的文件:
电力运营商比其上的一元运营商绑定得更紧密 剩下;它比右边的一元运算符更紧密。该 语法是:
power ::= primary ["**" u_expr]
因此,在功率和一元运算符的未表示序列中,运算符从右到左进行评估(这不会限制操作数的评估顺序): - 1 ** 2导致-1
强调我的。
因此,要获得所需的结果,您需要在-4
附近添加括号。
>>> (-4) ** 2
16
答案 1 :(得分:3)
如果你有-4没有括号,则负号被认为是一元运算符,基本上是"乘以负数。" (-4)**2
将为16,因为这实际上是负4平方,但-4**2
使用正常的操作顺序(乘法前取幂)并将其视为-(4**2)
。
希望有所帮助!
编辑:要真正理解运算符优先级,请查看文档中的这个方便的列表:
http://docs.python.org/2/reference/expressions.html#operator-precedence
如您所见,-
的优先级低于**
答案 2 :(得分:1)
Python并未将其评估为(-4)^ 2它将其评估为 - (4 ^ 2)。
>>> (-4)**2
16
>>>-4**2
-16
答案 3 :(得分:0)
-4 ** 2表示 - (4 ^ 2)。 首先,4是平方然后乘以-1。 -1(4 ^ 2)= -1(16)= -16。
如果您想要16作为答案,那么您必须输入(-4)** 2。
>>> -4**2
-16
>>> (-4)**2
16