2016-03-07 103 views
2

a-b*i變爲負數時,爲什麼使用Python 2.7時爲-8 % 5而不是3-3%Python中的操作問題

a = 12 
b = 5 

for i in range(10): 
    print a-b*i, (a-b*i) % b 

12 2 
7 2 
2 2 
-3 2 
-8 2 
-13 2 
-18 2 
-23 2 
-28 2 
-33 2 
+1

注:這不可能是3,因爲 - 8≢3(mod 5) – spectras

+0

@spectras,感謝您的迴應並投票。我正在這樣想,爲什麼不是-8 = 5 * -1 +(-3)?這就是我的困惑所在。雖然結果可能是-3。 :) 您的建議表示讚賞。 –

+1

事實上,結果可能是-3或+2。 Python選擇具有右側操作數符號的結果,而其他語言選擇具有左側操作數符號的結果。 – spectras

回答

1

您可以使用谷歌計算器自己去查:

https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=-8+%25+5

當你做A/N的歐幾里得divison,你會得到一個提醒。整個交易應滿足的方程 a = qn + r 其中q是一個商數,屬於Z(整數從-inf至+ INF) 所以你的情況

-8 = 5 * (-2) + 2 
thus 
r = 2 = (-8) % 5 
+0

謝謝斯坦利,但爲什麼不'-8 = 5 * -1 +(-3)'?這就是我的困惑所在。雖然結果可能是-3。 :) –

+0

嗨斯坦利,你錯過了一個鏈接? :) –

+1

是的: - )從Python文檔:模運算符總是產生與第二個操作數(或零)相同符號的結果;在你的例子中,餘數是(-3),這是負數。另外,Python強制執行屬性abs(a%b)