2014-12-03 42 views
0

Python似乎無法將數字的正確值返回爲零的冪。 當我給它一個文字方程時,它可以正常工作,但對於任何比原始數字更復雜的任何事物,它總是返回正數1。
下面是一些測試:0指數方程式上的符號故障

>>> -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 

UPDATE: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 意外(驚人),但我懷疑這樣的話......)

+1

任何引起'0'的冪的非零整數應該返回一個'+ 1'。所以'(0-40)** 0'正確地產生了一個'+ 1'。 「-40 ** 0」返回一個「-1」的原因是因爲**比'-'更強烈地與'40'結合。 – eigenchris 2014-12-03 20:53:49

+0

那麼我認爲'a = -60; a ** 0 - > 1'評估爲「(-60)** 0」?這對我來說很有意義。 – Augusta 2014-12-03 21:37:04

+0

這是正確的。 :) – eigenchris 2014-12-03 21:38:53

回答

4

Python是正確的,並做你期望它做的事情。這是一個操作順序問題。任何數字(正數或負數)等於零。但是請記住,乘法是在減法運算之前進行的。因此,在更詳細,什麼Python看到是這樣的: 第一種情況:

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

第二種情況:

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

在5日的情況下,以及它與括號做

int(-40) ** 0 = (-40) ** 0 = 1 
+0

啊,我明白了。感謝您向我解釋這一點。我認爲第一個例子(就是那個給我想要的東西)可能是特例,但是希望它不是。 我想'a = -60;一個** 0 - > 1'將被評估爲'(-60)** 0',也可以解析爲+1 ... 嗯......該死的。 – Augusta 2014-12-03 21:40:50

1

在這個問題就stumpled,我不明白的語法。

但我不認爲(-40)^ 0 = -40^0。

在左側,指數是最後一個操作。這就是爲什麼左側應該等於1. 在右側,減號是最後的操作。這就是爲什麼結果應該是-1。

1

這裏沒有任何問題。每個號碼power01

在蟒蛇象星座-.+,...有較少的優先級電源(**),所以當你把0 - 40的圓括號內你有(-1)**01但是當你做-1**0首先你必須1**0然後-

>>> (0-4)**0 == (-1)**0 == 1 
>>> -1**0 == -(1**0) == -1