摘要:補(bǔ)充一個(gè)資料,供有興趣的朋友閱讀浮點(diǎn)數(shù)算法爭(zhēng)議和限制說(shuō)明以上除法規(guī)則,是針對(duì),在中,將和等同起來(lái)了。比如下面的例子不啰嗦了,實(shí)驗(yàn)一個(gè)注意了,引用了一個(gè)模塊之后,再做除法,就不管什么情況,都是得到浮點(diǎn)數(shù)的結(jié)果了。
除法啰嗦的,不僅是python。
整數(shù)除以整數(shù)看官請(qǐng)?jiān)趩?dòng)idle之后,練習(xí)下面的運(yùn)算:
>>> 2/5 0 >>> 2.0/5 0.4 >>> 2/5.0 0.4 >>> 2.0/5.0 0.4
看到?jīng)]有?麻煩出來(lái)了,如果從小學(xué)數(shù)學(xué)知識(shí)除法,以上四個(gè)運(yùn)算結(jié)果都應(yīng)該是0.4。但我們看到的后三個(gè)符合,第一個(gè)居然結(jié)果是0。why?
因?yàn)?,在python里面有一個(gè)規(guī)定,像2/5中的除法這樣,是要取整。2除以5,商是0(整數(shù)),余數(shù)是5(整數(shù))。那么如果用這種形式:2/5,計(jì)算結(jié)果就是商那個(gè)整數(shù)?;蛘呖梢岳斫鉃椋?strong>整數(shù)除以整數(shù),結(jié)果是整數(shù)(商)。
繼續(xù)實(shí)驗(yàn),驗(yàn)證這個(gè)結(jié)論:
>>> 5/2 2 >>> 6/3 2 >>> 5/2 2 >>> 6/2 3 >>> 7/2 3 >>> 8/2 4 >>> 9/2 4
注意:這里是得到整數(shù)商,而不是得到含有小數(shù)位的結(jié)果后“四舍五入”。例如5/2,得到的是商2,余數(shù)1,最終5/2=2。并不是對(duì)2.5進(jìn)行四舍五入。
浮點(diǎn)數(shù)與整數(shù)相除列為看官注意,這個(gè)標(biāo)題和上面的標(biāo)題格式不一樣,上面的標(biāo)題是“整數(shù)除以整數(shù)”,如果按照風(fēng)格一貫制的要求,本節(jié)標(biāo)題應(yīng)該是“浮點(diǎn)數(shù)除以整數(shù)”,但沒(méi)有,現(xiàn)在是“浮點(diǎn)數(shù)與整數(shù)相除”,這是因?yàn)榘艘韵氯N情況:
被除數(shù)是浮點(diǎn)數(shù),除數(shù)是整數(shù)
被除數(shù)是整數(shù),除數(shù)是浮點(diǎn)數(shù)
被除數(shù)和除數(shù)都是浮點(diǎn)數(shù)
出結(jié)論之前,還是先做實(shí)驗(yàn):
>>> 9.0/2 4.5 >>> 9/2.0 4.5 >>> 9.0/2.0 4.5 >>> 8.0/2 4.0 >>> 8/2.0 4.0 >>> 8.0/2.0 4.0
歸納,得到規(guī)律:不管是被除數(shù)還是除數(shù),只要有一個(gè)數(shù)是浮點(diǎn)數(shù),結(jié)果就是浮點(diǎn)數(shù)。所以,如果相除的結(jié)果有余數(shù),也不會(huì)像前面一樣了,而是要返回一個(gè)浮點(diǎn)數(shù),這就跟在數(shù)學(xué)上學(xué)習(xí)的結(jié)果一樣了。
>>> 10.0/3 3.3333333333333335
這個(gè)是不是就有點(diǎn)搞怪了,按照數(shù)學(xué)知識(shí),應(yīng)該是3.33333...,后面是3的循環(huán)了。那么你的計(jì)算機(jī)就停不下來(lái)了,滿屏都是3。為了避免這個(gè),python武斷終結(jié)了循環(huán),但是,可悲的是沒(méi)有按照“四舍五入”的原則終止。
關(guān)于無(wú)限循環(huán)小數(shù)問(wèn)題,小學(xué)都學(xué)習(xí)了,但是這可不是一個(gè)簡(jiǎn)單問(wèn)題,看看維基百科的詞條:0.999...,會(huì)不會(huì)有深入體會(huì)呢?
總之,要用python,就得遵循她的規(guī)定,前面兩條規(guī)定已經(jīng)明確了。
補(bǔ)充一個(gè)資料,供有興趣的朋友閱讀:浮點(diǎn)數(shù)算法:爭(zhēng)議和限制
說(shuō)明:以上除法規(guī)則,是針對(duì)python2,在python3中,將5/2和5.0/2等同起來(lái)了。不過(guò),如果要得到那個(gè)整數(shù)部分的上,可以用另外一種方式:地板除.
>>> 9/2 4 >>> 9//2 4
python總會(huì)要提供多種解決問(wèn)題的方案的,這是她的風(fēng)格。
開始用輪子python之所以受人歡迎,一個(gè)很重重要的原因,就是輪子多。這是比喻啦。就好比你要跑的快,怎么辦?光天天練習(xí)跑步是不行滴,要用輪子。找輛自行車,就快了很多。還嫌不夠快,再換電瓶車,再換汽車,再換高鐵...反正你可以選擇的很多。但是,這些讓你跑的快的東西,多數(shù)不是你自己造的,是別人造好了,你來(lái)用。甚至兩條腿也是感謝父母恩賜。正是因?yàn)檩喿佣啵梢赃x擇的多,就可以以各種不同速度享受了。
python就是這樣,有各種各樣別人造好的輪子,我們只需要用。只不過(guò)那些輪子在python里面的名字不叫自行車、汽車,叫做“模塊”,有人承接別的語(yǔ)言的名稱,叫做“類庫(kù)”、“類”。不管叫什么名字把。就是別人造好的東西我們拿過(guò)來(lái)使用。
怎么用?可以通過(guò)兩種形式用:
形式1:import module-name。import后面跟空格,然后是模塊名稱,例如:import os
形式2:from module1 import module11。module1是一個(gè)大模塊,里面還有子模塊module11,只想用module11,就這么寫了。比如下面的例子:
不啰嗦了,實(shí)驗(yàn)一個(gè):
>>> from __future__ import division >>> 5/2 2.5 >>> 9/2 4.5 >>> 9.0/2 4.5 >>> 9/2.0 4.5
注意了,引用了一個(gè)模塊之后,再做除法,就不管什么情況,都是得到浮點(diǎn)數(shù)的結(jié)果了。
這就是輪子的力量。
關(guān)于余數(shù)前面計(jì)算5/2的時(shí)候,商是2,余數(shù)是1
余數(shù)怎么得到?
實(shí)驗(yàn)下面的操作:
>>> 5%2 1 >>> 9%2 1 >>> 7%3 1 >>> 6%4 2 >>> 5.0%2 1.0
符號(hào):%,就是要得到兩個(gè)數(shù)(可以是整數(shù),也可以是浮點(diǎn)數(shù))相除的余數(shù)。
前面說(shuō)python有很多人見(jiàn)人愛(ài)的輪子(模塊),她還有豐富的內(nèi)建函數(shù),也會(huì)幫我們做不少事情。例如函數(shù)divmod()
>>> divmod(5,2) #表示5除以2,返回了商和余數(shù) (2, 1) >>> divmod(9,2) (4, 1) >>> divmod(5.0,2) (2.0, 1.0)四舍五入
最后一個(gè)了,一定要堅(jiān)持,今天的確有點(diǎn)啰嗦了。要實(shí)現(xiàn)四舍五入,很簡(jiǎn)單,就是內(nèi)建函數(shù):round()
動(dòng)手試試:
>>> round(1.234567,2) 1.23 >>> round(1.234567,3) 1.235 >>> round(10.0/3,4) 3.3333
簡(jiǎn)單吧。越簡(jiǎn)單的時(shí)候,越要小心,當(dāng)你遇到下面的情況,就有點(diǎn)懷疑了:
>>> round(1.2345,3) 1.234 #應(yīng)該是:1.235 >>> round(2.235,2) 2.23 #應(yīng)該是:2.24
哈哈,我發(fā)現(xiàn)了python的一個(gè)bug,太激動(dòng)了。
別那么激動(dòng),如果真的是bug,這么明顯,是輪不到我的。為什么?具體解釋看這里,下面摘錄官方文檔中的一段話:
Note:
The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for more information.
原來(lái)真的輪不到我。(垂頭喪氣狀。)
似乎除法的問(wèn)題到此要結(jié)束了,其實(shí)遠(yuǎn)遠(yuǎn)沒(méi)有,不過(guò),做為初學(xué)者,至此即可。還留下了很多話題,比如如何處理循環(huán)小數(shù)問(wèn)題,我肯定不會(huì)讓有探索精神的朋友失望的,在我的github中有這樣一個(gè)輪子,如果要深入研究,可以來(lái)這里嘗試。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37303.html
摘要:軟件文檔或者源代碼文檔是指與軟件系統(tǒng)及其軟件工程過(guò)程有關(guān)聯(lián)的文本實(shí)體。而則認(rèn)為軟件文檔是被軟件工程師之間用作溝通交流的一種方式,溝通的信息主要是有關(guān)所開發(fā)的軟件系統(tǒng)。則強(qiáng)調(diào)文檔的權(quán)威性,他認(rèn)為文檔應(yīng)該提供對(duì)軟件系統(tǒng)的精確描述。 文檔,這個(gè)詞語(yǔ)在經(jīng)常在程序員的嘴里冒出來(lái),有時(shí)候他們還經(jīng)常以文檔有沒(méi)有或者全不全為標(biāo)準(zhǔn)來(lái)衡量一個(gè)軟件項(xiàng)目是否高大上。那么,軟件中的文檔是什么呢?有什么要求呢?p...
摘要:最后實(shí)現(xiàn)的符號(hào)運(yùn)算,符號(hào)與實(shí)數(shù)對(duì)四則運(yùn)算封閉,符號(hào)與符號(hào)對(duì)加減封閉多么偷懶啊哈哈哈哈原諒我沒(méi)文化上,知道了的通過(guò)單元測(cè)試要實(shí)現(xiàn)方法。 最后的效果: if __name__ == __main__: import doctest doctest.testmod() x = Symbols(x) print(x * 2 + 1 == 8.0 * x + 6)...
摘要:下面列出一個(gè)表格,將所有的運(yùn)算符表現(xiàn)出來(lái)。比較運(yùn)算符所謂比較,就是比一比兩個(gè)東西。由于其在符號(hào)邏輯運(yùn)算中的特殊貢獻(xiàn),很多計(jì)算機(jī)語(yǔ)言中將邏輯運(yùn)算稱為布爾運(yùn)算,將其結(jié)果稱為布爾值。布爾所創(chuàng)立的這套邏輯被稱之為布爾代數(shù)。 在計(jì)算機(jī)高級(jí)中語(yǔ)言,運(yùn)算符是比較多樣化的。其實(shí),也都源于我們?nèi)粘5男枰? 算術(shù)運(yùn)算符 前面已經(jīng)講過(guò)了四則運(yùn)算,其中涉及到一些運(yùn)算符:加減乘除,對(duì)應(yīng)的符號(hào)分別是:+ -...
摘要:語(yǔ)句,遍列列表字符串字典集合等迭代器,依次處理迭代器中的每個(gè)元素。與配合使用處理在程序運(yùn)行中出現(xiàn)的異常情況。表示此行為空,不運(yùn)行任何操作。在迭代器函數(shù)內(nèi)使用,用于返回一個(gè)元素。恭請(qǐng)到上瀏覽及時(shí)更新的教程零基礎(chǔ)學(xué) 小孩子剛剛開始學(xué)說(shuō)話的時(shí)候,常常是一個(gè)字一個(gè)字地開始學(xué),比如學(xué)說(shuō)餃子,對(duì)他/她來(lái)講,似乎有點(diǎn)難度,大人也聰明,于是就簡(jiǎn)化了,用餃餃來(lái)代替,其實(shí)就是讓孩子學(xué)會(huì)一個(gè)字就能表達(dá)。當(dāng)然...
摘要:根據(jù)這個(gè)定義,在里面規(guī)定了一些占位符,通過(guò)這些占位符來(lái)說(shuō)明那個(gè)位置應(yīng)該填寫什么類型的東西,這里暫且了解兩個(gè)占位符表示那個(gè)位置是整數(shù),表示那個(gè)位置應(yīng)該是字符串。啰嗦半天,占位符是不是理解了呢下面我們就用占位符來(lái)連接字符串。 上一章中已經(jīng)講到連接兩個(gè)字符串的一種方法。復(fù)習(xí)一下: >>> a= py >>> b= thon >>> a+b python 既然這是一種方法,言外之意,還有...
閱讀 1853·2021-11-23 09:51
閱讀 986·2021-10-08 10:05
閱讀 3458·2021-09-26 09:55
閱讀 1068·2021-09-22 15:21
閱讀 1654·2021-09-09 09:33
閱讀 1358·2019-08-30 15:56
閱讀 1309·2019-08-30 15:55
閱讀 995·2019-08-30 13:19