Python似乎无法将数字的正确值返回到零的幂。
当我给它一个字面方程时,它可以正常工作,但它总是返回正数1,对于比原始数字更复杂的零点数。
以下是一些测试:
>>> -40 ** 0 # this is the correct result
-1
>>> (0 - 40) ** 0 # you'd expect this to give the same thing, but...
1
>>> a = -40 # let's try something else...
>>> a ** 0
1
>>> int(-40) ** 0 # this oughtn't to change anything, yet...
1
>>> -66.6 ** 0 # raw floats are fine.
-1.0
>>> (0 - 66.6) ** 0.0 # ...until you try and do something with them.
1.0
更新:pow()
也给出了这个结果,所以第一个结果可能是例外......
>>> pow(-60, 0)
1
签名整数会有问题吗?我需要这个用于值为1,-1或0的三重开关,具体取决于输入是正值还是负值,或者为零。我可以通过以下方式完成同样的事情:
if val > 0: switch = 1
elif val < 0: switch = -1
else: switch = 0
...然后使用变量开关作为我的目的
但这不能回答我关于Python如何处理零功率的问题
(我也会接受-40 ** 0
偶然返回-1 (现象),但我怀疑是这种情况......)
答案 0 :(得分:5)
Python是正确的并且正在做你期望它做的事情。这是一个操作顺序问题。第零次幂的任何数字(负数或正数)等于1.但请记住,乘法在按运算顺序减去之前。所以更详细地说,python看到的是: 第一种情况:
-40 ** 0 = -(40 ** 0) = -(1) = -1
第二案:
(0 - 40) ** 0 = (-40) ** 0 = 1
在第五种情况下,它与括号
有关int(-40) ** 0 = (-40) ** 0 = 1
答案 1 :(得分:1)
刚刚解决了这个问题,我没有得到语法。
但我不认为(-40)^ 0 = -40 ^ 0。
在左侧,指数是最后一个操作。这就是左侧应该等于1的原因。 在右侧,减号是最后一个操作。这就是为什么结果应该是-1。
答案 2 :(得分:1)
这里没有任何问题。 power 0
的每个号码都是1
。
在-.+,...
这样的python标志中,权力优先级较低(**
)所以当你将0 - 40
置于括号内时,你(-1)**0
就是1
但是当你-1**0
1**0
时,-
然后>>> (0-4)**0 == (-1)**0 == 1
>>> -1**0 == -(1**0) == -1
。
{{1}}