2014-09-02 66 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