>>33>>>33333333333333333333333333333333333333333333333333333333333333333333333333333333L>>>3.2222223.222222上面顯示的是在交互模式下,如果輸入3,就顯示了3,這樣的數(shù)稱為整數(shù),這個(gè)稱呼" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

詳解Python編程中基本的數(shù)學(xué)計(jì)算使用

系統(tǒng) 1611 0

數(shù)
在 Python 中,對數(shù)的規(guī)定比較簡單,基本在小學(xué)數(shù)學(xué)水平即可理解。

那么,做為零基礎(chǔ)學(xué)習(xí)這,也就從計(jì)算小學(xué)數(shù)學(xué)題目開始吧。因?yàn)閺倪@里開始,數(shù)學(xué)的基礎(chǔ)知識列位肯定過關(guān)了。

            
>>> 3
3
>>> 3333333333333333333333333333333333333333
3333333333333333333333333333333333333333L
>>> 3.222222
3.222222

          

上面顯示的是在交互模式下,如果輸入 3,就顯示了 3,這樣的數(shù)稱為整數(shù),這個(gè)稱呼和小學(xué)數(shù)學(xué)一樣。

如果輸入一個(gè)比較大的數(shù),第二個(gè),那么多個(gè) 3 組成的一個(gè)整數(shù),在 Python 中稱之為長整數(shù)。為了表示某個(gè)數(shù)是長整數(shù),Python 會(huì)在其末尾顯示一個(gè)L。其實(shí),現(xiàn)在的 Python 已經(jīng)能夠自動(dòng)將輸入的很大的整數(shù)視為長整數(shù)了。你不必在這方面進(jìn)行區(qū)別。

第三個(gè),在數(shù)學(xué)里面稱為小數(shù),這里你依然可以這么稱呼,不過就像很多編程語言一樣,習(xí)慣稱之為“浮點(diǎn)數(shù)”。至于這個(gè)名稱的由來,也是有點(diǎn)說道的,有興趣可以 google.

上述舉例中,可以說都是無符號(或者說是非負(fù)數(shù)),如果要表示負(fù)數(shù),跟數(shù)學(xué)中的表示方法一樣,前面填上負(fù)號即可。

值得注意的是,我們這里說的都是十進(jìn)制的數(shù)。

除了十進(jìn)制,還有二進(jìn)制、八進(jìn)制、十六進(jìn)制都是在編程中可能用到的,當(dāng)然用六十進(jìn)制的時(shí)候就比較少了(其實(shí)時(shí)間記錄方式就是典型的六十進(jìn)制)。

具體每個(gè)數(shù)字,在 Python 中都是一個(gè)對象,比如前面輸入的 3,就是一個(gè)對象。每個(gè)對象,在內(nèi)存中都有自己的一個(gè)地址,這個(gè)就是它的身份。

            
>>> id(3)
140574872
>>> id(3.222222)
140612356
>>> id(3.0)
140612356
>>>

          

用內(nèi)建函數(shù) id()可以查看每個(gè)對象的內(nèi)存地址,即身份。

內(nèi)建函數(shù),英文為 built-in Function,讀者根據(jù)名字也能猜個(gè)八九不離十了。不錯(cuò),就是 Python 中已經(jīng)定義好的內(nèi)部函數(shù)。
以上三個(gè)不同的數(shù)字,是三個(gè)不同的對象,具有三個(gè)不同的內(nèi)存地址。特別要注意,在數(shù)學(xué)上,3 和 3.0 是相等的,但是在這里,它們是不同的對象。

用 id()得到的內(nèi)存地址,是只讀的,不能修改。

了解了“身份”,再來看“類型”,也有一個(gè)內(nèi)建函數(shù)供使用type()。

            
>>> type(3)

            
              
>>> type(3.0)

              
                
>>> type(3.222222)

                
                
              
            
          

用內(nèi)建函數(shù)能夠查看對象的類型。 ,說明 3 是整數(shù)類型(Interger); 則告訴我們那個(gè)對象是浮點(diǎn)型(Floating point real number)。與 id()的結(jié)果類似,type()得到的結(jié)果也是只讀的。

至于對象的值,在這里就是對象本身了。

看來對象也不難理解。請保持自信,繼續(xù)。

變量
僅僅寫出 3、4、5 是遠(yuǎn)遠(yuǎn)不夠的,在編程語言中,經(jīng)常要用到“變量”和“數(shù)”(在 Python 中嚴(yán)格來講是對象)建立一個(gè)對應(yīng)關(guān)系。例如:

            
>>> x = 5
>>> x
5
>>> x = 6
>>> x
6

          

在這個(gè)例子中,x = 5就是在變量(x)和數(shù)(5)之間建立了對應(yīng)關(guān)系,接著又建立了 x 與 6 之間的對應(yīng)關(guān)系。我們可以看到,x 先“是”5,后來“是”6。

在 Python 中,有這樣一句話是非常重要的:對象有類型,變量無類型。怎么理解呢?

首先,5、6 都是整數(shù),Python 中為它們?nèi)×艘粋€(gè)名字,叫做“整數(shù)”類型的數(shù)據(jù),或者說數(shù)據(jù)類型是整數(shù),用 int 表示。

當(dāng)我們在 Python 中寫入了 5、6,computer 姑娘就自動(dòng)在她的內(nèi)存中某個(gè)地方給我們建立這兩個(gè)對象(對象的定義后面會(huì)講,這里你先用著,逐漸就明晰含義了),就好比建造了兩個(gè)雕塑,一個(gè)是形狀似 5,一個(gè)形狀似 6,這就兩個(gè)對象,這兩個(gè)對象的類型就是 int.

那個(gè) x 呢?就好比是一個(gè)標(biāo)簽,當(dāng)x = 5時(shí),就是將 x 這個(gè)標(biāo)簽拴在了 5 上了,通過這個(gè) x,就順延看到了 5,于是在交互模式中,>>> x輸出的結(jié)果就是 5,給人的感覺似乎是 x 就是 5,事實(shí)是 x 這個(gè)標(biāo)簽貼在 5上面。同樣的道理,當(dāng)x = 6時(shí),標(biāo)簽就換位置了,貼到 6 上面。

所以,這個(gè)標(biāo)簽 x 沒有類型之說,它不僅可以貼在整數(shù)類型的對象上,還能貼在其它類型的對象上,比如后面會(huì)介紹到的 str(字符串)類型的對象等等。

這是 Python 區(qū)別于一些語言非常重要的地方。

四則運(yùn)算
按照下面要求,在交互模式中運(yùn)行,看看得到的結(jié)果和用小學(xué)數(shù)學(xué)知識運(yùn)算之后得到的結(jié)果是否一致

            
>>> 2+5
7
>>> 5-2
3
>>> 10/2
5
>>> 5*2
10
>>> 10/5+1
3
>>> 2*3-4
2

          

上面的運(yùn)算中,分別涉及到了四個(gè)運(yùn)算符號:加(+)、減(-)、乘(*)、除(/)

另外,我相信看官已經(jīng)發(fā)現(xiàn)了一個(gè)重要的公理:

在計(jì)算機(jī)中,四則運(yùn)算和小學(xué)數(shù)學(xué)中學(xué)習(xí)過的四則運(yùn)算規(guī)則是一樣的

要不說人是高等動(dòng)物呢,自己發(fā)明的東西,一定要繼承自己已經(jīng)掌握的知識,別跟自己的歷史過不去。偉大的科學(xué)家們,在當(dāng)初設(shè)計(jì)計(jì)算機(jī)的時(shí)候就想到列位現(xiàn)在學(xué)習(xí)的需要了,一定不能讓后世子孫再學(xué)新的運(yùn)算規(guī)則,就用小學(xué)數(shù)學(xué)里面的好了。感謝那些科學(xué)家先驅(qū)者,澤被后世。

下面計(jì)算三個(gè)算術(shù)題,看看結(jié)果是什么

            
4 + 2
4.0 + 2
4.0 + 2.0

          

看官可能憤怒了,這么簡單的題目,就不要?jiǎng)隈{計(jì)算機(jī)了,太浪費(fèi)了。

別著急,還是要運(yùn)算一下,然后看看結(jié)果,有沒有不一樣?要仔細(xì)觀察哦。

            
>>> 4+2
6
>>> 4.0+2
6.0
>>> 4.0+2.0
6.0

          

不一樣的地方是:第一個(gè)式子結(jié)果是 6,這是一個(gè)整數(shù);后面兩個(gè)是 6.0,這是浮點(diǎn)數(shù)。

定義 1:類似 4、-2、129486655、-988654、0 這樣形式的數(shù),稱之為整數(shù)
定義 2:類似 4.0、-2.0、2344.123、3.1415926 這樣形式的數(shù),稱之為浮點(diǎn)數(shù)
對這兩個(gè)的定義,不用死記硬背,google 一下。記住愛因斯坦說的那句話:書上有的我都不記憶(是這么的說?好像是,大概意思,反正我也不記憶)。后半句他沒說,我補(bǔ)充一下:忘了就 google。

似乎計(jì)算機(jī)做一些四則運(yùn)算是不在話下的,但是,有一個(gè)問題請你務(wù)必注意:在數(shù)學(xué)中,整數(shù)是可以無限大的,但是在計(jì)算機(jī)中,整數(shù)不能無限大。為什么呢?(我推薦你去 google,其實(shí)計(jì)算機(jī)的基本知識中肯定學(xué)習(xí)過了。)因此,就會(huì)有某種情況出現(xiàn),就是參與運(yùn)算的數(shù)或者運(yùn)算結(jié)果超過了計(jì)算機(jī)中最大的數(shù)了,這種問題稱之為“整數(shù)溢出問題”。

整數(shù)溢出問題
這里有一篇專門討論這個(gè)問題的文章,推薦閱讀:整數(shù)溢出

對于其它語言,整數(shù)溢出是必須正視的,但是,在 Python 里面,看官就無憂愁了,原因就是 Python 為我們解決了這個(gè)問題,請閱讀下面的拙文:大整數(shù)相乘

ok!看官可以在 IDE 中實(shí)驗(yàn)一下大整數(shù)相乘。

            
>>> 123456789870987654321122343445567678890098876*1233455667789990099876543332387665443345566
152278477193527562870044352587576277277562328362032444339019158937017801601677976183816L

          

看官是幸運(yùn)的,Python 解憂愁,所以,選擇學(xué)習(xí) Python 就是珍惜光陰了。

上面計(jì)算結(jié)果的數(shù)字最后有一個(gè) L,就表示這個(gè)數(shù)是一個(gè)長整數(shù),不過,看官不用管這點(diǎn),反正是 Python 為我們搞定了。

在結(jié)束本節(jié)之前,有兩個(gè)符號需要看官牢記(不記住也沒關(guān)系,可以隨時(shí) google,只不過記住后使用更方便)

整數(shù),用 int 表示,來自單詞:integer
浮點(diǎn)數(shù),用 float 表示,就是單詞:float
可以用一個(gè)命令:type(object)來檢測一個(gè)數(shù)是什么類型。

            
>>> type(4)

            
                #4 是 int,整數(shù)
>>> type(5.0)

              
                 #5.0 是 float,浮點(diǎn)數(shù)
type(988776544222112233445566778899887766554433221133344455566677788998776543222344556678)

                
                    # 是長整數(shù),也是一個(gè)整數(shù)


                
              
            
          

除法
除法??嗦,不僅是 Python。

整數(shù)除以整數(shù)
進(jìn)入 Python 交互模式之后(以后在本教程中,可能不再重復(fù)這類的敘述,只要看到>>>,就說明是在交互模式下),練習(xí)下面的運(yùn)算:

            
>>> 2 / 5
0
>>> 2.0 / 5
0.4
>>> 2 / 5.0
0.4
>>> 2.0 / 5.0
0.4

          

看到?jīng)]有?麻煩出來了(這是在 Python2.x 中),按照數(shù)學(xué)運(yùn)算,以上四個(gè)運(yùn)算結(jié)果都應(yīng)該是 0.4。但我們看到的后三個(gè)符合,第一個(gè)居然結(jié)果是 0。why?

因?yàn)椋?Python(嚴(yán)格說是 Python2.x 中,Python3 會(huì)有所變化)里面有一個(gè)規(guī)定,像 2/5 中的除法這樣,是要取整(就是去掉小數(shù),但不是四舍五入)。2 除以 5,商是 0(整數(shù)),余數(shù)是 2(整數(shù))。那么如果用這種形式:2/5,計(jì)算結(jié)果就是商那個(gè)整數(shù)。或者可以理解為:整數(shù)除以整數(shù),結(jié)果是整數(shù)(商)。

比如:

            
>>> 5 / 2
2
>>> 7 / 2
3
>>> 8 / 2
4

          

注意:得到是商(整數(shù)),而不是得到含有小數(shù)位的結(jié)果再通過“四舍五入”取整。例如:5/2,得到的是商 2,余數(shù) 1,最終5 / 2 = 2。并不是對 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ù)”,但沒有,現(xiàn)在是“浮點(diǎn)數(shù)與整數(shù)相除”,其含義是:

假設(shè):x 除以 y。其中 x 可能是整數(shù),也可能是浮點(diǎn)數(shù);y 可能是整數(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é)知識,應(yīng)該是 3.33333...,后面是 3 的循環(huán)了。那么你的計(jì)算機(jī)就停不下來了,滿屏都是 3。為了避免這個(gè),Python 武斷終結(jié)了循環(huán),但是,可悲的是沒有按照“四舍五入”的原則終止。當(dāng)然,還會(huì)有更奇葩的出現(xiàn):

            
>>> 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 姑娘在計(jì)算這么簡單的問題上,如此糊涂了呢?不是 computer 姑娘糊涂,她依然冰雪聰明。原因在于十進(jìn)制和二進(jìn)制的轉(zhuǎn)換上,computer 姑娘用的是二進(jìn)制進(jìn)行計(jì)算,上面的例子中,我們輸入的是十進(jìn)制,她就要把十進(jìn)制的數(shù)轉(zhuǎn)化為二進(jìn)制,然后再計(jì)算。但是,在轉(zhuǎn)化中,浮點(diǎn)數(shù)轉(zhuǎn)化為二進(jìn)制,就出問題了。

例如十進(jìn)制的 0.1,轉(zhuǎn)化為二進(jìn)制是:0.0001100110011001100110011001100110011001100110011...

也就是說,轉(zhuǎn)化為二進(jìn)制后,不會(huì)精確等于十進(jìn)制的 0.1。同時(shí),計(jì)算機(jī)存儲(chǔ)的位數(shù)是有限制的,所以,就出現(xiàn)上述現(xiàn)象了。

這種問題不僅僅是 Python 中有,所有支持浮點(diǎn)數(shù)運(yùn)算的編程語言都會(huì)遇到,它不是 Python 的 bug。

明白了問題原因,怎么解決呢?就 Python 的浮點(diǎn)數(shù)運(yùn)算而言,大多數(shù)機(jī)器上每次計(jì)算誤差不超過 2**53 分之一。對于大多數(shù)任務(wù)這已經(jīng)足夠了,但是要在心中記住這不是十進(jìn)制算法,每個(gè)浮點(diǎn)數(shù)計(jì)算可能會(huì)帶來一個(gè)新的舍入錯(cuò)誤。

一般情況下,只要簡單地將最終顯示的結(jié)果用“四舍五入”到所期望的十進(jìn)制位數(shù),就會(huì)得到期望的最終結(jié)果。

對于需要非常精確的情況,可以使用 decimal 模塊,它實(shí)現(xiàn)的十進(jìn)制運(yùn)算適合會(huì)計(jì)方面的應(yīng)用和高精度要求的應(yīng)用。另外 fractions 模塊支持另外一種形式的運(yùn)算,它實(shí)現(xiàn)的運(yùn)算基于有理數(shù)(因此像 1/3 這樣的數(shù)字可以精確地表示)。最高要求則可是使用由 SciPy 提供的 Numerical Python 包和其它用于數(shù)學(xué)和統(tǒng)計(jì)學(xué)的包。列出這些東西,僅僅是讓看官能明白,解決問題的方式很多,后面會(huì)用這些中的某些方式解決上述問題。

關(guān)于無限循環(huán)小數(shù)問題,我有一個(gè)鏈接推薦給諸位,它不是想象的那么簡單呀。請閱讀:維基百科的詞條:0.999...,會(huì)不會(huì)有深入體會(huì)呢?

補(bǔ)充一個(gè)資料,供有興趣的朋友閱讀:浮點(diǎn)數(shù)算法:爭議和限制
Python 總會(huì)要提供多種解決問題的方案的,這是她的風(fēng)格。

引用模塊解決除法--啟用輪子
Python 之所以受人歡迎,一個(gè)很重重要的原因,就是輪子多。這是比喻啦。就好比你要跑的快,怎么辦?光天天練習(xí)跑步是不行滴,要用輪子。找輛自行車,就快了很多。還嫌不夠快,再換電瓶車,再換汽車,再換高鐵...反正你可以選擇的很多。但是,這些讓你跑的快的東西,多數(shù)不是你自己造的,是別人造好了,你來用。甚至兩條腿也是感謝父母恩賜。正是因?yàn)檩喿佣啵梢赃x擇的多,就可以以各種不同速度享受了。

輪子是人類偉大的發(fā)明。

Python 就是這樣,有各種輪子,我們只需要用。只不過那些輪子在 Python 里面的名字不叫自行車、汽車,叫做“模塊”,有人承接別的語言的名稱,叫做“類庫”、“類”。不管叫什么名字吧。就是別人造好的東西我們拿過來使用。

怎么用?可以通過兩種形式用:

形式 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é)果了。

這就是輪子的力量。

余數(shù)
前面計(jì)算 5/2 的時(shí)候,商是 2,余數(shù)是 1

余數(shù)怎么得到?在 Python 中(其實(shí)大多數(shù)語言也都是),用%符號來取得兩個(gè)數(shù)相除的余數(shù).

實(shí)驗(yàn)下面的操作:

            
>>> 5 % 2
1
>>> 6%4
2
>>> 5.0%2
1.0

          

符號:%,就是要得到兩個(gè)數(shù)(可以是整數(shù),也可以是浮點(diǎn)數(shù))相除的余數(shù)。

前面說 Python 有很多人見人愛的輪子(模塊),她還有豐富的內(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)四舍五入,很簡單,就是內(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

          


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲毛片网站 | 成人精品视频一区二区三区尤物 | 国产专区在线视频 | 久久91精品国产91久久小草 | 麻豆精品一区二区 | 国产va免费精品观看精品 | 国产成人18黄网站免费网站 | 日韩欧美高清 | 国产精品国产午夜免费福利看 | 特黄级| 久久爱伊人 | 日日摸夜夜摸狠狠摸日日碰夜夜做 | 99精品视频在线在线视频观看 | 日韩欧美一区二区在线观看 | 2021国产精品自拍 | 国产99视频在线 | 女人被男人狂躁下面在线观看 | 国产高清视频在线 | 99亚洲精品高清一二区 | jizjizjiz中国护士18 | 国产成人av在线 | 在线免费日韩 | 毛片基地看看成人免费 | 国产日韩视频 | 天天搞天天搞 | 欧美成人激情在线 | 国产黄色麻豆视频 | 噜噜噜色网 | 久久99深爱久久99精品 | 久久久久久福利 | 欧美日韩一区二区三区视频播 | 99在线精品视频免费观里 | 色综合天天综合网看在线影院 | 久久色亚洲 | 午夜影院18 | 人人九九精 | 国产一区二区精品丝袜 | 99在线免费观看 | 国产伦精品一区二区三区高清 | 亚洲精品人成网在线播放影院 | 中文字幕免费在线观看动作大片 |