2014-09-02 68 views
2

我正在使用Python 2.7.5。当将整数提升到零的幂时,根据分子是正数还是负数,您可能会看到-1或1。在Python中将数字提升为零时的奇怪行为

直接输入到Python解释器产生如下:

>>> -2418**0 
-1 

这是正确的答案。但是,当我将其输入到相同的解释器中时:

>>> result = -2481 
>>> result**0 
1 

答案是1而不是-1。使用complex内建as suggested here对结果没有影响。

这是怎么发生的?

回答

6

你为什么期望它是-1? 1(根据我所教的定义)是正确的答案。

由于运算符优先级,第一个给出错误的答案。

(-1)**0 = 1 

-1**0 = -(1**0) = -(1) = -1 

参见维基百科为0指数的定义:http://en.wikipedia.org/wiki/Exponentiation#Zero_exponent

+0

啊!正如我想的那样,答案是我是一个白痴。我在我的计算器和谷歌上检查了这个问题,但他们成为同样的优先问题的受害者。 尽管答案显而易见,但我想我会保留这个帖子,以便任何犯同样错误的人都能看到它。 – jhrf 2014-09-02 12:57:53

+0

@jhrf优先问题实际上是在您已经链接的问题中解释的 - 接受的答案以*开头“提高权力优先于一元减号”。* – jonrsharpe 2014-09-02 12:59:25

+0

您是对的。我现在看到了。但是当我读到时,我仍然觉得我应该看到-1的印象。我认为我是对的,蟒蛇是错的。如果我首先知道我错了,我不会发布这个问题。 – jhrf 2014-09-02 13:01:56

2

-2418**0被解释(数学)为-1 * (2418**0)所以答案是-1 * 1 = -1。乘法之前发生指数运算。

在第二个示例中,您将变量result绑定到-1。下一行接受变量result并将其提升至0的功率,因此您获得1。换句话说,你在做(-1)**0

n**01对任意实数n ......除了0:技术上0**0是不确定的,但仍然Python的将返回0**0 == 1

0

你的数学是错误的。 (-2481)**0应该是1.

根据维基百科,Any nonzero number raised by the exponent 0 is 1