摘要:補充一個資料,供有興趣的朋友閱讀浮點數算法爭議和限制說明以上除法規則,是針對,在中,將和等同起來了。比如下面的例子不啰嗦了,實驗一個注意了,引用了一個模塊之后,再做除法,就不管什么情況,都是得到浮點數的結果了。
除法啰嗦的,不僅是python。
整數除以整數看官請在啟動idle之后,練習下面的運算:
>>> 2/5 0 >>> 2.0/5 0.4 >>> 2/5.0 0.4 >>> 2.0/5.0 0.4
看到沒有?麻煩出來了,如果從小學數學知識除法,以上四個運算結果都應該是0.4。但我們看到的后三個符合,第一個居然結果是0。why?
因為,在python里面有一個規定,像2/5中的除法這樣,是要取整。2除以5,商是0(整數),余數是5(整數)。那么如果用這種形式:2/5,計算結果就是商那個整數。或者可以理解為:整數除以整數,結果是整數(商)。
繼續實驗,驗證這個結論:
>>> 5/2 2 >>> 6/3 2 >>> 5/2 2 >>> 6/2 3 >>> 7/2 3 >>> 8/2 4 >>> 9/2 4
注意:這里是得到整數商,而不是得到含有小數位的結果后“四舍五入”。例如5/2,得到的是商2,余數1,最終5/2=2。并不是對2.5進行四舍五入。
浮點數與整數相除列為看官注意,這個標題和上面的標題格式不一樣,上面的標題是“整數除以整數”,如果按照風格一貫制的要求,本節標題應該是“浮點數除以整數”,但沒有,現在是“浮點數與整數相除”,這是因為包含了以下三種情況:
被除數是浮點數,除數是整數
被除數是整數,除數是浮點數
被除數和除數都是浮點數
出結論之前,還是先做實驗:
>>> 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
歸納,得到規律:不管是被除數還是除數,只要有一個數是浮點數,結果就是浮點數。所以,如果相除的結果有余數,也不會像前面一樣了,而是要返回一個浮點數,這就跟在數學上學習的結果一樣了。
>>> 10.0/3 3.3333333333333335
這個是不是就有點搞怪了,按照數學知識,應該是3.33333...,后面是3的循環了。那么你的計算機就停不下來了,滿屏都是3。為了避免這個,python武斷終結了循環,但是,可悲的是沒有按照“四舍五入”的原則終止。
關于無限循環小數問題,小學都學習了,但是這可不是一個簡單問題,看看維基百科的詞條:0.999...,會不會有深入體會呢?
總之,要用python,就得遵循她的規定,前面兩條規定已經明確了。
補充一個資料,供有興趣的朋友閱讀:浮點數算法:爭議和限制
說明:以上除法規則,是針對python2,在python3中,將5/2和5.0/2等同起來了。不過,如果要得到那個整數部分的上,可以用另外一種方式:地板除.
>>> 9/2 4 >>> 9//2 4
python總會要提供多種解決問題的方案的,這是她的風格。
開始用輪子python之所以受人歡迎,一個很重重要的原因,就是輪子多。這是比喻啦。就好比你要跑的快,怎么辦?光天天練習跑步是不行滴,要用輪子。找輛自行車,就快了很多。還嫌不夠快,再換電瓶車,再換汽車,再換高鐵...反正你可以選擇的很多。但是,這些讓你跑的快的東西,多數不是你自己造的,是別人造好了,你來用。甚至兩條腿也是感謝父母恩賜。正是因為輪子多,可以選擇的多,就可以以各種不同速度享受了。
python就是這樣,有各種各樣別人造好的輪子,我們只需要用。只不過那些輪子在python里面的名字不叫自行車、汽車,叫做“模塊”,有人承接別的語言的名稱,叫做“類庫”、“類”。不管叫什么名字把。就是別人造好的東西我們拿過來使用。
怎么用?可以通過兩種形式用:
形式1:import module-name。import后面跟空格,然后是模塊名稱,例如:import os
形式2:from module1 import module11。module1是一個大模塊,里面還有子模塊module11,只想用module11,就這么寫了。比如下面的例子:
不啰嗦了,實驗一個:
>>> from __future__ import division >>> 5/2 2.5 >>> 9/2 4.5 >>> 9.0/2 4.5 >>> 9/2.0 4.5
注意了,引用了一個模塊之后,再做除法,就不管什么情況,都是得到浮點數的結果了。
這就是輪子的力量。
關于余數前面計算5/2的時候,商是2,余數是1
余數怎么得到?
實驗下面的操作:
>>> 5%2 1 >>> 9%2 1 >>> 7%3 1 >>> 6%4 2 >>> 5.0%2 1.0
符號:%,就是要得到兩個數(可以是整數,也可以是浮點數)相除的余數。
前面說python有很多人見人愛的輪子(模塊),她還有豐富的內建函數,也會幫我們做不少事情。例如函數divmod()
>>> divmod(5,2) #表示5除以2,返回了商和余數 (2, 1) >>> divmod(9,2) (4, 1) >>> divmod(5.0,2) (2.0, 1.0)四舍五入
最后一個了,一定要堅持,今天的確有點啰嗦了。要實現四舍五入,很簡單,就是內建函數:round()
動手試試:
>>> round(1.234567,2) 1.23 >>> round(1.234567,3) 1.235 >>> round(10.0/3,4) 3.3333
簡單吧。越簡單的時候,越要小心,當你遇到下面的情況,就有點懷疑了:
>>> round(1.2345,3) 1.234 #應該是:1.235 >>> round(2.235,2) 2.23 #應該是:2.24
哈哈,我發現了python的一個bug,太激動了。
別那么激動,如果真的是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.
原來真的輪不到我。(垂頭喪氣狀。)
似乎除法的問題到此要結束了,其實遠遠沒有,不過,做為初學者,至此即可。還留下了很多話題,比如如何處理循環小數問題,我肯定不會讓有探索精神的朋友失望的,在我的github中有這樣一個輪子,如果要深入研究,可以來這里嘗試。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37303.html
摘要:軟件文檔或者源代碼文檔是指與軟件系統及其軟件工程過程有關聯的文本實體。而則認為軟件文檔是被軟件工程師之間用作溝通交流的一種方式,溝通的信息主要是有關所開發的軟件系統。則強調文檔的權威性,他認為文檔應該提供對軟件系統的精確描述。 文檔,這個詞語在經常在程序員的嘴里冒出來,有時候他們還經常以文檔有沒有或者全不全為標準來衡量一個軟件項目是否高大上。那么,軟件中的文檔是什么呢?有什么要求呢?p...
摘要:最后實現的符號運算,符號與實數對四則運算封閉,符號與符號對加減封閉多么偷懶啊哈哈哈哈原諒我沒文化上,知道了的通過單元測試要實現方法。 最后的效果: if __name__ == __main__: import doctest doctest.testmod() x = Symbols(x) print(x * 2 + 1 == 8.0 * x + 6)...
摘要:下面列出一個表格,將所有的運算符表現出來。比較運算符所謂比較,就是比一比兩個東西。由于其在符號邏輯運算中的特殊貢獻,很多計算機語言中將邏輯運算稱為布爾運算,將其結果稱為布爾值。布爾所創立的這套邏輯被稱之為布爾代數。 在計算機高級中語言,運算符是比較多樣化的。其實,也都源于我們日常的需要。 算術運算符 前面已經講過了四則運算,其中涉及到一些運算符:加減乘除,對應的符號分別是:+ -...
摘要:語句,遍列列表字符串字典集合等迭代器,依次處理迭代器中的每個元素。與配合使用處理在程序運行中出現的異常情況。表示此行為空,不運行任何操作。在迭代器函數內使用,用于返回一個元素。恭請到上瀏覽及時更新的教程零基礎學 小孩子剛剛開始學說話的時候,常常是一個字一個字地開始學,比如學說餃子,對他/她來講,似乎有點難度,大人也聰明,于是就簡化了,用餃餃來代替,其實就是讓孩子學會一個字就能表達。當然...
摘要:根據這個定義,在里面規定了一些占位符,通過這些占位符來說明那個位置應該填寫什么類型的東西,這里暫且了解兩個占位符表示那個位置是整數,表示那個位置應該是字符串。啰嗦半天,占位符是不是理解了呢下面我們就用占位符來連接字符串。 上一章中已經講到連接兩個字符串的一種方法。復習一下: >>> a= py >>> b= thon >>> a+b python 既然這是一種方法,言外之意,還有...
閱讀 1825·2021-11-23 09:51
閱讀 942·2021-10-08 10:05
閱讀 3429·2021-09-26 09:55
閱讀 1036·2021-09-22 15:21
閱讀 1629·2021-09-09 09:33
閱讀 1259·2019-08-30 15:56
閱讀 1280·2019-08-30 15:55
閱讀 965·2019-08-30 13:19