<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                除法啰嗦,不僅是python。 ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/103.md#整數除以整數)整數除以整數 進入python交互模式之后(以后在本教程中,可能不再重復這類的敘述,只要看到>>>,就說明是在交互模式下),練習下面的運算: ~~~ >>> 2 / 5 0 >>> 2.0 / 5 0.4 >>> 2 / 5.0 0.4 >>> 2.0 / 5.0 0.4 ~~~ 看到沒有?麻煩出來了(這是在python2.x中),按照數學運算,以上四個運算結果都應該是0.4。但我們看到的后三個符合,第一個居然結果是0。why? 因為,在python(嚴格說是python2.x中,python3會有所變化)里面有一個規定,像2/5中的除法這樣,是要取整(就是去掉小數,但不是四舍五入)。2除以5,商是0(整數),余數是2(整數)。那么如果用這種形式:2/5,計算結果就是商那個整數。或者可以理解為:**整數除以整數,結果是整數(商)**。 比如: ~~~ >>> 5 / 2 2 >>> 7 / 2 3 >>> 8 / 2 4 ~~~ **注意:**得到是商(整數),而不是得到含有小數位的結果再通過“四舍五入”取整。例如:5/2,得到的是商2,余數1,最終`5 / 2 = 2`。并不是對2.5進行四舍五入。 ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/103.md#浮點數與整數相除)浮點數與整數相除 這個標題和上面的標題格式不一樣,上面的標題是“整數除以整數”,如果按照風格一貫制的要求,本節標題應該是“浮點數除以整數”,但沒有,現在是“浮點數與整數相除”,其含義是: > 假設:x除以y。其中 x 可能是整數,也可能是浮點數;y可能是整數,也可能是浮點數。 出結論之前,還是先做實驗: ~~~ >>> 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.1 + 0.2 0.30000000000000004 >>> 0.1 + 0.1 - 0.2 0.0 >>> 0.1 + 0.1 + 0.1 - 0.3 5.551115123125783e-17 >>> 0.1 + 0.1 + 0.1 - 0.2 0.10000000000000003 ~~~ 越來越糊涂了,為什么computer姑娘在計算這么簡單的問題上,如此糊涂了呢?不是computer姑娘糊涂,她依然冰雪聰明。原因在于十進制和二進制的轉換上,computer姑娘用的是二進制進行計算,上面的例子中,我們輸入的是十進制,她就要把十進制的數轉化為二進制,然后再計算。但是,在轉化中,浮點數轉化為二進制,就出問題了。 例如十進制的0.1,轉化為二進制是:0.0001100110011001100110011001100110011001100110011... 也就是說,轉化為二進制后,不會精確等于十進制的0.1。同時,計算機存儲的位數是有限制的,所以,就出現上述現象了。 這種問題不僅僅是python中有,所有支持浮點數運算的編程語言都會遇到,它不是python的bug。 明白了問題原因,怎么解決呢?就python的浮點數運算而言,大多數機器上每次計算誤差不超過 2**53 分之一。對于大多數任務這已經足夠了,但是要在心中記住這不是十進制算法,每個浮點數計算可能會帶來一個新的舍入錯誤。 一般情況下,只要簡單地將最終顯示的結果用“四舍五入”到所期望的十進制位數,就會得到期望的最終結果。 對于需要非常精確的情況,可以使用 decimal 模塊,它實現的十進制運算適合會計方面的應用和高精度要求的應用。另外 fractions 模塊支持另外一種形式的運算,它實現的運算基于有理數(因此像1/3這樣的數字可以精確地表示)。最高要求則可是使用由 SciPy提供的 Numerical Python 包和其它用于數學和統計學的包。列出這些東西,僅僅是讓看官能明白,解決問題的方式很多,后面會用這些中的某些方式解決上述問題。 關于無限循環小數問題,我有一個鏈接推薦給諸位,它不是想象的那么簡單呀。請閱讀:[維基百科的詞條:0.999...](http://zh.wikipedia.org/wiki/0.999%E2%80%A6),會不會有深入體會呢? > 補充一個資料,供有興趣的朋友閱讀:[浮點數算法:爭議和限制](https://docs.python.org/2/tutorial/floatingpoint.html#tut-fp-issues) python總會要提供多種解決問題的方案的,這是她的風格。 ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/103.md#引用模塊解決除法--啟用輪子)引用模塊解決除法--啟用輪子 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 ~~~ 注意了,引用了一個模塊之后,再做除法,就不管什么情況,都是得到浮點數的結果了。 這就是輪子的力量。 ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/103.md#余數)余數 前面計算5/2的時候,商是2,余數是1 余數怎么得到?在python中(其實大多數語言也都是),用`%`符號來取得兩個數相除的余數. 實驗下面的操作: ~~~ >>> 5 % 2 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) ~~~ ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/103.md#四舍五入)四舍五入 最后一個了,一定要堅持,今天的確有點啰嗦了。要實現四舍五入,很簡單,就是內建函數:`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](https://docs.python.org/2/tutorial/floatingpoint.html#tut-fp-issues)?for more information. 原來真的輪不到我。歸根到底還是浮點數中的十進制轉化為二進制惹的禍。 似乎除法的問題到此要結束了,其實遠遠沒有,不過,做為初學者,至此即可。還留下了很多話題,比如如何處理循環小數問題,我肯定不會讓有探索精神的朋友失望的,在我的github中有這樣一個輪子,如果要深入研究,[可以來這里嘗試](https://github.com/qiwsir/algorithm/blob/master/divide.py)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看