當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
當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
您可以使用谷歌計算器自己去查:
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
謝謝斯坦利,但爲什麼不'-8 = 5 * -1 +(-3)'?這就是我的困惑所在。雖然結果可能是-3。 :) –
嗨斯坦利,你錯過了一個鏈接? :) –
是的: - )從Python文檔:模運算符總是產生與第二個操作數(或零)相同符號的結果;在你的例子中,餘數是(-3),這是負數。另外,Python強制執行屬性abs(a%b)
注:這不可能是3,因爲 - 8≢3(mod 5) – spectras
@spectras,感謝您的迴應並投票。我正在這樣想,爲什麼不是-8 = 5 * -1 +(-3)?這就是我的困惑所在。雖然結果可能是-3。 :) 您的建議表示讚賞。 –
事實上,結果可能是-3或+2。 Python選擇具有右側操作數符號的結果,而其他語言選擇具有左側操作數符號的結果。 – spectras