在Python中将数字提高到零次方时的奇怪行为
我正在使用Python 2.7.5。当你把一个整数的零次方抬起来时,你可能会期待看到-1或1,这取决于这个数是正数还是负数。
直接在Python解释器里输入这个操作,结果是这样的:
>>> -2418**0
-1
这个结果是正确的。但是当我在同一个解释器里输入这个:
>>> result = -2481
>>> result**0
1
结果却是1,而不是-1。使用complex
这个内置功能,像这里提到的这样,对结果没有任何影响。
这到底是为什么呢?
3 个回答
0
你的数学算错了。(-2481)**0
应该等于 1。
根据维基百科,任何非零数字的0次方都是1
。
3
-2418**0
在数学上被理解为 -1 * (2418**0)
,所以结果是 -1 * 1 = -1
。在这个计算中,幂运算(就是指数运算)会先于乘法进行。
在你的第二个例子中,你把变量 result
赋值为 -1
。接下来的一行代码是把 result
这个变量提升到 0
的幂,所以你得到的结果是 1
。换句话说,你实际上是在计算 (-1)**0
。
对于任何实数 n
来说,n**0
的结果都是 1
,除了 0
:严格来说,0**0
是没有定义的,尽管在 Python 中,计算 0**0
仍然会返回 0**0 == 1
。
8
你为什么会觉得答案是-1呢?根据我学到的定义,1才是正确的答案。
第一个答案之所以不对,是因为运算符的优先级问题。
(-1)**0 = 1
-1**0 = -(1**0) = -(1) = -1
想了解0的指数的定义,可以看看维基百科:http://en.wikipedia.org/wiki/Exponentiation#Zero_exponent