python中正负号怎么表示_[转载]python中整数除法的正负号
先看下面幾個小題目:其中符號“//”表示除法結果的整數部分(即3/2=1.5,但3//2=1),“%”表示取余數。
(1)7//3 和 7%3 的結果是什么?
(2)7//-3 和 7%-3 的結果是什么?
(3)-7//3 和 -7%3的結果是什么?
(4)-7//-3 和 -7%-3 的結果是什么?
來看一下運算結果:
(1)7//3 = 2, ?7%3 = 1
這個沒什么好說的,會做除法的都知道。
(2)7//-3 = -3, ?7%-3 = -2
疑問:為什么不是這樣的結果:7//-3 = -2, 7%-3 = 1
(C語言里面是這個結果)
(3)-7//3 = -3, ?-7%3 = 2
疑問:為什么不是這樣的結果:-7//3 = -2, ?-7%3
= -1 (C語言里面是這個結果)
(4)-7//-3 = 2, -7%-3 = -1
這個也沒什么太大問題,而且C語言里面也是這樣的。
現在問題出來了,如果除數和被除數同為正數或者同為負數,結果沒有什么爭議(最起碼我這沒有)。但是如果除數和被除數正負號不同,那么python和c里面的計算結果就出現差異了,怎么理解呢?
我個人更喜歡python的計算結果(好吧,我不知道有沒有什么標準來規定這個,但是就目前來說,我還是更喜歡python的結果,因為我理解起來更容易一些)。下面是我的一點想法:
這樣來看,a 除以 b (我一向分不清除以、除、被除數、除數神馬的,反正我這說的就等于C里面的a/b):
這個題目的意義就是,計算數字a里面包含有多少個b,我覺得這就是除法的意義。
那么余數的概念就可以引申出來了,如果a并不是b的整數倍,那么除法之后肯定會有剩余的,也就是余數。
假設a有這么大:
a:
|-----------------------------------------------------------------------------------|
然后b有這么大:
b: ?|-----------------------|
我們把b多copy幾份,然后跟a比比:
a:
|-----------------------------------------------------------------------------------|
3b: |-----------------------|-----------------------|-----------------------|
余數 ?|-----------|
看上面的圖,a里面能包含3個b,所以3就是除法結果,剩下的那一塊,就是余數。
我是這么理解的,余數,就是范圍在b以內的那一部分,它不夠一個b的大小了。
那么這里就又有問題了,余數的范圍“在b以內”,又是什么意思?
好吧,我喜歡0這個數字(一般我會理解為原點),“在b以內”,那就是在區間(0,
b)內(這里b是正數),當然如果b是負數,那這個范圍就是(b, 0)。
按照這個理解,7除以-3,余數范圍一定是在(-3, 0)內;而-7除以3,余數范圍一定是在(0, 3)內。
就是這個結果:
7除以-3,商為-3,余數為-2;
-7除以3,商為-3,余數為2.
好吧,羅嗦這么多,其實就是為了說明余數的范圍是在(0, b)或者(b, 0)之間,沒有什么特別的意義。
當然如果你就認為余數的范圍更廣,比如 |余數| 在范圍 (0,
|b|)之間,那么我上面說的就都沒有用了,不同的理解方式而已,沒有對與錯的區別。(順便提一句,上面的兩條豎線表示數學中的絕對值)
最后,C語言的那個商和余數的正負號,我還是沒有理解,印象中以前寫過分析的筆記,類似于同號為正,異號為負之類的東西,但是說實話,我記不住那個規律。
最后的最后,我覺得這個東西的爭論是沒有意義的,不同的理解方式,知道分別是怎么回事就行了,至于誰對誰錯嘛,反正把商和余數填進式子里發現結果都是正確的,不是嗎?
————————————————————————————————————————————————
那個啥,我又回來了,因為我發現了一點小問題:
7除以-3,可以(商:-2,余數:1),也可以(商:-3,余數-2)。
在python里面,結果是(商:-3,余數:-2)。也就是說,余數取“0和除數”之間的那個(這里就是0和-3之間的,因此余數選-2,而不是1)。
在C里面,結果是(商:-2,余數:1)。也就是說,余數取“更靠近0”的那個(這里就是1,因為它比-2距離0更近一點)。
再看另外一個:-7除以3,可以是(商:-2,余數:-1),也可以是(商:-3,余數:2)。
在python里面,結果是(商:-3,余數:2)。同樣的,余數又是取的“0和除數”之間的那個(這里就是0和3之間的,因此余數是2,而不是-1)。
在C里面,結果是(商:-2,余數:-1)。再一次看到,余數是“更靠近0”的那個(這里的-1要比2距離0更近一些,不是嗎?)
包含負號的還有另外一個情況,那就是除數和被除數都是負數,我們再來看看這種:
-7除以-3,可以是(商:2,余數:-1),也可以是(商:3,余數:2)
在python里面,結果是(商:2,余數:-1)。再次符合我們的推論,余數取“0和除數”之間的那個(這里就是0和-3之間的,因此是-1,而不是2)。
在C里面,結果是(商:2,余數:-1)。很難得,兩種語言中的計算結果居然是一樣的。仔細看,這也符合我們對C語言中的推論:余數是“更靠近0”的那個,因為這里的-1比2更靠近0.
綜合以上的例子,我做了下面這樣一個推論(至少目前我就這樣來理解C和python中的除法運算結果了):
在python中,如果做除法運算后,余數有多個選擇(一般最多也就兩個),那么余數應該選擇“0和除數”之間的那個。
而在C中,如果做除法運算后,余數有多個選擇(一般最多也就是兩個),那么余數應該選擇“更靠近0”的那個。
而在確定了余數之后,商是什么就已經確定了,因此答案也就知道了。
這次是真的寫完了(一大篇亂七八糟的,其實只看最后的那兩句紅色部分就行了,但是我就是不提前告訴你們,重走一下我走過的彎路吧,挺好的不是嗎?)
PS:
誰能告訴我,為什么我電腦上的google拼音時不時的就調不出來了,切換輸入法之后凋出來的是微軟拼音,怎么搞?
總結
以上是生活随笔為你收集整理的python中正负号怎么表示_[转载]python中整数除法的正负号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 慎独的修炼之道--群处守嘴 独处守心 修
- 下一篇: iTab新标签页,一款个性化的浏览器起始