我正在使用Python 2.7.5。當將整數提升到零的冪時,根據分子是正數還是負數,您可能會看到-1或1。在Python中將數字提升爲零時的奇怪行爲
直接輸入到Python解釋器產生如下:
>>> -2418**0
-1
這是正確的答案。但是,當我將其輸入到相同的解釋器中時:
>>> result = -2481
>>> result**0
1
答案是1而不是-1。使用complex
內建as suggested here對結果沒有影響。
這是怎麼發生的?
我正在使用Python 2.7.5。當將整數提升到零的冪時,根據分子是正數還是負數,您可能會看到-1或1。在Python中將數字提升爲零時的奇怪行爲
直接輸入到Python解釋器產生如下:
>>> -2418**0
-1
這是正確的答案。但是,當我將其輸入到相同的解釋器中時:
>>> result = -2481
>>> result**0
1
答案是1而不是-1。使用complex
內建as suggested here對結果沒有影響。
這是怎麼發生的?
你爲什麼期望它是-1? 1(根據我所教的定義)是正確的答案。
由於運算符優先級,第一個給出錯誤的答案。
(-1)**0 = 1
-1**0 = -(1**0) = -(1) = -1
參見維基百科爲0指數的定義:http://en.wikipedia.org/wiki/Exponentiation#Zero_exponent
-2418**0
被解釋(數學)爲-1 * (2418**0)
所以答案是-1 * 1 = -1
。乘法之前發生指數運算。
在第二個示例中,您將變量result
綁定到-1
。下一行接受變量result
並將其提升至0
的功率,因此您獲得1
。換句話說,你在做(-1)**0
。
n**0
是1
對任意實數n
......除了0
:技術上0**0
是不確定的,但仍然Python的將返回0**0 == 1
。
你的數學是錯誤的。 (-2481)**0
應該是1.
根據維基百科,Any nonzero number raised by the exponent 0 is 1
。
啊!正如我想的那樣,答案是我是一個白癡。我在我的計算器和谷歌上檢查了這個問題,但他們成爲同樣的優先問題的受害者。 儘管答案顯而易見,但我想我會保留這個帖子,以便任何犯同樣錯誤的人都能看到它。 – jhrf 2014-09-02 12:57:53
@jhrf優先問題實際上是在您已經鏈接的問題中解釋的 - 接受的答案以*開頭「提高權力優先於一元減號」。* – jonrsharpe 2014-09-02 12:59:25
您是對的。我現在看到了。但是當我讀到時,我仍然覺得我應該看到-1的印象。我認爲我是對的,蟒蛇是錯的。如果我首先知道我錯了,我不會發布這個問題。 – jhrf 2014-09-02 13:01:56