- Python 3.7從零開始學(xué)
- 劉宇宙
- 2367字
- 2019-12-06 14:02:21
2.2 數(shù)據(jù)類型
計(jì)算機(jī)是可以做數(shù)學(xué)計(jì)算的機(jī)器,計(jì)算機(jī)程序理所當(dāng)然可以處理各種數(shù)值。計(jì)算機(jī)能處理的遠(yuǎn)不止數(shù)值,還有文本、圖形、音頻、視頻、網(wǎng)頁(yè)等各種各樣的數(shù)據(jù),不同的數(shù)據(jù)需要定義不同的數(shù)據(jù)類型。Python 3中有6種標(biāo)準(zhǔn)的對(duì)象類型:Number(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Sets(集合)、Dictionary(字典)。本節(jié)首先講解Number數(shù)據(jù)類型,其他5種數(shù)據(jù)類型在后續(xù)章節(jié)介紹。
Python 3支持3種不同的數(shù)值類型:整型(int)、浮點(diǎn)型(float)、復(fù)數(shù)(complex)。
2.2.1 整型
int通常被稱為整型或整數(shù),是正、負(fù)整數(shù),不帶小數(shù)點(diǎn)。在Python 3中,整型沒有限制大小,可以當(dāng)作long類型使用,所以Python 3沒有Python 2的long類型。
例如,公司組織旅游,大家坐上了大巴準(zhǔn)備出發(fā),現(xiàn)在需要統(tǒng)計(jì)有多少人在車上,老板吩咐小萌清點(diǎn)一下人數(shù),小萌花了兩分鐘逐個(gè)點(diǎn)了一遍,總計(jì)51人。小萌在交互模式下輸入:
>>> 51 51
這里使用的是整型。
到服務(wù)區(qū)后,大家休息了一下,再次準(zhǔn)備出發(fā)時(shí),老板又吩咐小萌清點(diǎn)一下人數(shù)。小萌苦笑一下,看來又得花兩分鐘清點(diǎn)人數(shù)了,為什么不叫一個(gè)人幫忙從車的另一頭清點(diǎn)呢?于是小萌叫小智幫忙從另一頭清點(diǎn)一下人數(shù)。一分鐘后,小萌和小智在車中間碰上了,小智告訴小萌他的計(jì)數(shù)是25人,小萌在交互模式下輸入:
>>> 25+25 50
小萌準(zhǔn)備把數(shù)字報(bào)告給老板,突然想到上次報(bào)告的是51人,這次是50人,數(shù)字不同啊,還差1人,小萌在交互模式下輸入:
>>> 51-50 1
怎么少了一人呢?小萌突然慌了,然后仔細(xì)一想,原來是把自己忘加上了,于是再次輸入:
>>> 25+25+1 51
這次沒問題了。于是小萌給了老板和上次一樣的答案。老板示意司機(jī)可以發(fā)車了,又突然叫停,看天氣挺熱的,大家路上可能會(huì)口渴,于是吩咐小萌去服務(wù)區(qū)給每人買兩瓶水,再買一大包糖給大家在路上補(bǔ)充能量。每人兩瓶水,一共要買多少瓶呢?小萌在交互模式下輸入:
>>> 51*2 102
一共要買102瓶水,這么多,于是小萌讓小智幫忙一起去提水。
水和糖都買回來了,水好分,給每人兩瓶就是,這一大包糖該怎么給大家呢?看包裝袋上有總顆數(shù),一共有153顆,每人多少顆呢?小萌在交互模式下輸入:
>>> 153/51 3.0
好了,給每人發(fā)3顆糖就可以了。于是小萌高高興興發(fā)糖去了,小智也幫忙一起發(fā),每人給3顆。糖終于發(fā)完了,小萌很愜意,坐下來補(bǔ)充能量。小萌突然想到了什么,有153顆糖,分給51人,每人3顆糖沒錯(cuò),但計(jì)算出來的結(jié)果怎么是3.0呢?假如有155顆糖,計(jì)算結(jié)果會(huì)是怎樣的呢?輸入以下數(shù)據(jù):
>>> 155/51 3.0392156862745097
如果按這個(gè)結(jié)果分,就沒有辦法分了。這是怎么回事呢?
原因是:在整數(shù)除法中,除法(/)計(jì)算結(jié)果是浮點(diǎn)數(shù),即使兩個(gè)整數(shù)恰好整除,結(jié)果也是浮點(diǎn)數(shù)。如果只想得到整數(shù)的結(jié)果,丟棄可能的分?jǐn)?shù)部分,可以使用地板除(//),整數(shù)的地板除(//)永遠(yuǎn)是整數(shù),即使除不盡。
更改前面輸入的數(shù)據(jù):
>>> 153//51 3
這時(shí)就不是浮點(diǎn)數(shù)了。再看看155顆糖的結(jié)果:
>>> 155//51 3
153和155除以51都是3,這個(gè)就不對(duì)了。原來還有一個(gè)余數(shù)。
因?yàn)榈匕宄?/)只取結(jié)果的整數(shù)部分,所以Python提供了一個(gè)余數(shù)運(yùn)算,可以得到兩個(gè)整數(shù)相除的余數(shù),看看153和155對(duì)51的取余:
>>> 153%51 0 >>> 155%51 2
這次的結(jié)果就是想要的了。假如有155顆糖,就會(huì)多出2顆。小萌細(xì)細(xì)想著,嘴角泛起一絲自然的微笑,小智也發(fā)完糖了,過來向小萌匯報(bào),看見小萌的表情,小智心里頓時(shí)暖暖的,無須報(bào)告了。
2.2.2 浮點(diǎn)型
浮點(diǎn)型由整數(shù)部分與小數(shù)部分組成,也可以使用科學(xué)計(jì)數(shù)法表示。
比如,小萌還在細(xì)想中,老板突然打斷了她的思維,問她總共花了多少錢。小萌理了一下思緒,每瓶水3.3元,一共102瓶,總共多少錢呢?輸入如下:
>>> 3.3*102 336.59999999999997
結(jié)果怎么這么長(zhǎng)?小萌看傻了,不過冷靜一看,原來是:整數(shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部存儲(chǔ)的方式不同,整數(shù)運(yùn)算永遠(yuǎn)是精確的,而浮點(diǎn)數(shù)運(yùn)算可能會(huì)有四舍五入的誤差。
“老板,一共336.6元”。“好的,加上買糖的錢了嗎”?小萌暗罵自己,瞧我這腦筋。再計(jì)算一次,每瓶水3.3元,一共102瓶,再加上一包糖15.5元,輸入如下:
>>> 3.3*102+15.5 352.09999999999997
這結(jié)果好像很凌亂,應(yīng)該這么輸入:
>>> 336.6+15.5 352.1
這個(gè)結(jié)果就好看多了。報(bào)告給老板,一共花費(fèi)352.1元。
小萌又開始思考了,浮點(diǎn)數(shù)相乘結(jié)果這么怪,浮點(diǎn)數(shù)的除法是怎樣的呢?想到了就實(shí)踐,輸入如下:
>>> 153/51.0 3.0
這個(gè)結(jié)果和153除以51的結(jié)果是一樣的,如果155除以51.0呢?輸入如下:
>>> 155/51.0 3.0392156862745097
結(jié)果和155除以51也是一樣的。那做地板除和取余又是怎樣的呢?輸入如下:
>>> 155//51.0 3.0 >>> 155%51.0 2.0
可以看出,得到的結(jié)果都是浮點(diǎn)型的。
2.2.3 復(fù)數(shù)
復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分構(gòu)成,可以用a+bj或complex(a,b)表示,復(fù)數(shù)的實(shí)部a和虛部b都是浮點(diǎn)型。
Python支持復(fù)數(shù),不過Python的復(fù)數(shù)我們當(dāng)前階段使用或接觸得比較少,此處就不再具體講解,讀者有一個(gè)概念即可,有興趣可以自行查閱相關(guān)資料。
2.2.4 數(shù)據(jù)類型轉(zhuǎn)換
有時(shí)我們要對(duì)數(shù)據(jù)內(nèi)置的類型進(jìn)行轉(zhuǎn)換,只需要將數(shù)據(jù)類型作為函數(shù)名即可。
數(shù)據(jù)的類型轉(zhuǎn)換時(shí)有如下4個(gè)函數(shù)可以使用:
● int(x)將x轉(zhuǎn)換為一個(gè)整數(shù)。
● float(x)將x轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù)。
● complex(x)將x轉(zhuǎn)換為一個(gè)復(fù)數(shù),實(shí)數(shù)部分為x,虛數(shù)部分為0。
● complex(x, y)將x和y轉(zhuǎn)換為一個(gè)復(fù)數(shù),實(shí)數(shù)部分為x,虛數(shù)部分為y。x和y是數(shù)字表達(dá)式。
比如,小萌去購(gòu)物,計(jì)算出應(yīng)付金額是352.1元,超市老板為免除找零的麻煩,讓小萌支付352元。Python中的轉(zhuǎn)換可以執(zhí)行如下:
>>> int(352.1) 352
很容易就得到了轉(zhuǎn)換后的結(jié)果。但是金額的操作必須用浮點(diǎn)數(shù)進(jìn)行記賬,這個(gè)容易,用float函數(shù)就行了。輸入如下:
>>> float(352.1) 352.1
這樣就得到了浮點(diǎn)型數(shù)據(jù)。
結(jié)果跟輸入的一樣,這下怎么辦呢?把int函數(shù)放入float函數(shù)中是否可以呢?嘗試一下:
>>> float(int(352.1)) 352.0
這里先把352.1取整,得到整數(shù)352,再用float將352轉(zhuǎn)換成浮點(diǎn)數(shù)352.0,這樣就得到我們需要的結(jié)果了。雖然輸入的字符看起來有點(diǎn)復(fù)雜,但是還是得到結(jié)果了。
這其實(shí)是函數(shù)的嵌套,后面會(huì)進(jìn)行具體介紹,此處做相關(guān)了解即可。
2.2.5 常量
所謂常量,就是不能改變現(xiàn)有的值的變量,比如常用的數(shù)學(xué)常數(shù)π就是一個(gè)常量。在Python中,通常用全部大寫的變量名表示常量。
Python中有兩個(gè)比較常見的常量,即PI和E。
PI:數(shù)學(xué)常量pi(圓周率,一般以π表示)。
E:數(shù)學(xué)常量e,即自然對(duì)數(shù)。
這兩個(gè)常量將會(huì)在后續(xù)章節(jié)中使用,具體的用法在使用中體現(xiàn)。
- Android Wearable Programming
- 從零開始構(gòu)建企業(yè)級(jí)RAG系統(tǒng)
- Java程序設(shè)計(jì)(慕課版)
- Visual Basic程序設(shè)計(jì)教程
- JIRA 7 Administration Cookbook(Second Edition)
- Expert Data Visualization
- 數(shù)據(jù)結(jié)構(gòu)習(xí)題解析與實(shí)驗(yàn)指導(dǎo)
- Building RESTful Python Web Services
- Kotlin編程實(shí)戰(zhàn):創(chuàng)建優(yōu)雅、富于表現(xiàn)力和高性能的JVM與Android應(yīng)用程序
- 運(yùn)用后端技術(shù)處理業(yè)務(wù)邏輯(藍(lán)橋杯軟件大賽培訓(xùn)教材-Java方向)
- Java網(wǎng)絡(luò)編程核心技術(shù)詳解(視頻微課版)
- .NET 4.5 Parallel Extensions Cookbook
- Illustrator CC平面設(shè)計(jì)實(shí)戰(zhàn)從入門到精通(視頻自學(xué)全彩版)
- Xamarin Cross-Platform Development Cookbook
- 優(yōu)化驅(qū)動(dòng)的設(shè)計(jì)方法