Python 3 基礎(chǔ)教程(第3版)(慕課版) 課件 第3、4章 基本數(shù)據(jù)類型、組合數(shù)據(jù)類型_第1頁(yè)
Python 3 基礎(chǔ)教程(第3版)(慕課版) 課件 第3、4章 基本數(shù)據(jù)類型、組合數(shù)據(jù)類型_第2頁(yè)
Python 3 基礎(chǔ)教程(第3版)(慕課版) 課件 第3、4章 基本數(shù)據(jù)類型、組合數(shù)據(jù)類型_第3頁(yè)
Python 3 基礎(chǔ)教程(第3版)(慕課版) 課件 第3、4章 基本數(shù)據(jù)類型、組合數(shù)據(jù)類型_第4頁(yè)
Python 3 基礎(chǔ)教程(第3版)(慕課版) 課件 第3、4章 基本數(shù)據(jù)類型、組合數(shù)據(jù)類型_第5頁(yè)
已閱讀5頁(yè),還剩237頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Python3基礎(chǔ)教程第3版慕課版單元3基本數(shù)據(jù)類型任務(wù)3-1:測(cè)試數(shù)字的類型和取值范圍【任務(wù)目標(biāo)】在Python交互環(huán)境中測(cè)試整數(shù)、浮點(diǎn)數(shù)等數(shù)字的類型和取值范圍,示例代碼如下。>>>type(20)<class'int'>>>>type(0b110)<class'int'>>>>type(0o110)<class'int'>【任務(wù)實(shí)施】演示過(guò)程……>>>type(0x110)<class'int'>>>>type(True)<class'bool'>>>>type(2.5)<class'float'>>>>type(2+3j)<class'complex'>3.1數(shù)字類型本節(jié)主要內(nèi)容:整數(shù)類型浮點(diǎn)數(shù)類型復(fù)數(shù)類型小數(shù)類型分?jǐn)?shù)類型3.1.1整數(shù)類型整數(shù)類型可細(xì)分為整型(int)數(shù)和布爾型(bool)數(shù)。整型數(shù)(簡(jiǎn)稱“整數(shù)”)是不帶小數(shù)點(diǎn)的數(shù)。例如,123、-12、0、9999999999999999等。在Python中,整數(shù)可表示任意大小的數(shù)字(受計(jì)算機(jī)內(nèi)存限制)。例如,下面在交互模式下分別輸出2和9的100次方。>>>2**1001267650600228229401496703205376>>>9**100265613988875874769338781322035779626829233452653394495974574961739092490901302182994384699044001整數(shù)通常表示為十進(jìn)制。Python還允許將整數(shù)表示為二進(jìn)制、八進(jìn)制和十六進(jìn)制。二進(jìn)制:以“0b”或“0B”開(kāi)頭,數(shù)碼包括0和1。例如0b101、0B11。八進(jìn)制:以“0o”或“0O”開(kāi)頭,數(shù)碼包括0~7。例如0o15、0O123。十六進(jìn)制:以“0x”或“0X”開(kāi)頭,數(shù)碼包括0~9、A~F或a~f。例如0x12AB、0x12ab。不同進(jìn)制只是整數(shù)的不同書(shū)寫(xiě)形式,Python程序運(yùn)行時(shí)會(huì)將整數(shù)處理為十進(jìn)制數(shù)。布爾型數(shù)(也稱布爾值或邏輯值)只有True和False兩種取值。True和False類似于數(shù)字1和0。例外的情況是將布爾值轉(zhuǎn)換為字符串時(shí),True轉(zhuǎn)換為“True”,F(xiàn)alse轉(zhuǎn)換為“False”。在Python中,因?yàn)椴紶栃褪钦麛?shù)類型的子類型,所以邏輯運(yùn)算和比較運(yùn)算均可歸入數(shù)字運(yùn)算的范疇??梢允褂胻ype()函數(shù)查看數(shù)據(jù)類型,示例代碼如下。>>>type(123)<class'int'>>>>type(123.0)<class'float'>可以使用int()函數(shù)將一個(gè)字符串按指定進(jìn)制轉(zhuǎn)換為整數(shù)。int()函數(shù)的基本語(yǔ)法格式如下。int('整數(shù)字符串',n)int()函數(shù)按指定進(jìn)制將整數(shù)字符串轉(zhuǎn)換為對(duì)應(yīng)的整數(shù),示例代碼如下。>>>int('111') #默認(rèn)按十進(jìn)制轉(zhuǎn)換111>>>int('111',2) #按二進(jìn)制轉(zhuǎn)換7>>>int('111',8) #按八進(jìn)制轉(zhuǎn)換73>>>int('111',10) #按十進(jìn)制轉(zhuǎn)換111>>>int('111',16) #按十六進(jìn)制轉(zhuǎn)換273>>>int('111',5) #按五進(jìn)制轉(zhuǎn)換31int()函數(shù)的第一個(gè)參數(shù)只能是整數(shù)字符串,即字符串中應(yīng)該是一個(gè)有效的整數(shù)(包括正負(fù)號(hào)),不能包含小數(shù)點(diǎn)或其他字符(字符串開(kāi)頭的空格可以忽略),否則會(huì)出錯(cuò),示例代碼如下。>>>int('+12')12>>>int('-12')-12>>>int('123')123>>>int('12.3') #字符串中包含小數(shù)點(diǎn),出錯(cuò)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>ValueError:invalidliteralforint()withbase10:'12.3'>>>int('123abc') #字符串中包含字母,出錯(cuò)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>ValueError:invalidliteralforint()withbase10:'123abc'3.1.2浮點(diǎn)數(shù)類型浮點(diǎn)數(shù)類型的名稱為float。12.5、2.、.5、3.0、1.23e+10、1.23E-10等都是合法的浮點(diǎn)數(shù)常量。浮點(diǎn)數(shù)取值范圍為-10308~10308。超出取值范圍會(huì)產(chǎn)生溢出錯(cuò)誤(OverflowError)。示例代碼如下。>>>2. #小數(shù)點(diǎn)后的0可以省略2.0>>>.5

#小數(shù)點(diǎn)前的0可以省略0.5>>>10.0**3081e+308>>>10.0**309 #超出浮點(diǎn)數(shù)的取值范圍Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>OverflowError:(34,'Resulttoolarge')>>>-10.0**308-1e+308>>>-10.0**309 #超出浮點(diǎn)數(shù)的取值范圍Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>OverflowError:(34,'Resulttoolarge')float()函數(shù)可將整數(shù)和字符串轉(zhuǎn)換為浮點(diǎn)數(shù),示例代碼如下。>>>float(12)12.0>>>float('12')12.0>>>float('+12')12.0>>>float('-12')-12.03.1.3復(fù)數(shù)類型復(fù)數(shù)類型的名稱為complex。復(fù)數(shù)常量表示為“實(shí)部+虛部”形式,虛部以j或J結(jié)尾。例如,2+3j、2-3J、2j??捎胏omplex()函數(shù)來(lái)創(chuàng)建復(fù)數(shù),其基本格式如下。

complex(實(shí)部,虛部)示例代碼如下。>>>complex(2,3)(2+3j)3.1.4小數(shù)類型因?yàn)橛?jì)算機(jī)硬件特點(diǎn),浮點(diǎn)數(shù)不能執(zhí)行精確運(yùn)算示例代碼如下。>>>0.3+0.3+0.3+0.1 #計(jì)算結(jié)果并不是1.00.9999999999999999>>>0.3-0.1-0.1-0.1 #計(jì)算結(jié)果并不是0-2.7755575615628914e-17Python2.4開(kāi)始引入了一種新的數(shù)字類型:小數(shù)類型。小數(shù)可以看作是固定精度的浮點(diǎn)數(shù),它有固定的位數(shù)和小數(shù)點(diǎn),可以滿足要求精度的計(jì)算。1.創(chuàng)建和使用小數(shù)對(duì)象小數(shù)對(duì)象使用decimal模塊中的Decimal()函數(shù)創(chuàng)建示例代碼如下。>>>fromdecimalimportDecimal #從模塊導(dǎo)入函數(shù)>>>Decimal('0.3')+Decimal('0.3')+Decimal('0.3')+Decimal('0.1')Decimal('1.0')>>>Decimal('0.3')-Decimal('0.1')-Decimal('0.1')-Decimal('0.1')Decimal('0.0')>>>type(Decimal('1.0'))<class'decimal.Decimal'>2.小數(shù)的全局精度全局精度指作用于當(dāng)前程序的小數(shù)的有效位數(shù)設(shè)置,默認(rèn)全局精度為28位有效數(shù)字。可使用decimal模塊中的上下文對(duì)象來(lái)設(shè)置小數(shù)的全局精度。首先,調(diào)用decimal模塊的getcontext()函數(shù)獲得當(dāng)前的上下文對(duì)象再通過(guò)上下文對(duì)象的prec屬性設(shè)置全局精度示例代碼如下>>>fromdecimalimport* #導(dǎo)入模塊>>>Decimal('1')/Decimal('3') #用默認(rèn)精度計(jì)算小數(shù)Decimal('0.3333333333333333333333333333')>>>context=getcontext() #獲得上下文對(duì)象>>>context.prec=5 #設(shè)置全局小數(shù)精度為5位有效數(shù)字>>>Decimal('1')/Decimal('3')Decimal('0.33333')>>>Decimal('10')/Decimal('3')Decimal('3.3333')3.小數(shù)的臨時(shí)精度臨時(shí)精度在with模塊中使用。首先,調(diào)用decimal模塊的localcontext()函數(shù)返回本地上下文對(duì)象再通過(guò)本地上下文對(duì)象的prec屬性設(shè)置臨時(shí)精度示例代碼如下。>>>withlocalcontext()aslocal:...local.prec=3...Decimal('1')/Decimal('3')...Decimal('10')/Decimal('3')...Decimal('0.333')Decimal('3.33')3.1.5分?jǐn)?shù)類型分?jǐn)?shù)是Python2.6和3.0版本引入的新類型。分?jǐn)?shù)對(duì)象明確地?fù)碛幸粋€(gè)分子和分母,分子和分母保持最簡(jiǎn)。使用分?jǐn)?shù)可以避免浮點(diǎn)數(shù)的不精確性。分?jǐn)?shù)使用fractions模塊中的Fraction()函數(shù)來(lái)創(chuàng)建,其基本語(yǔ)法格式如下。x=Fraction(a,b)

其中,a為分子,b為分母,python自動(dòng)計(jì)算為最簡(jiǎn)分?jǐn)?shù)示例代碼>>>fromfractionsimportFraction #從模塊導(dǎo)入函數(shù)>>>x=Fraction(2,8) #創(chuàng)建分?jǐn)?shù)>>>xFraction(1,4)>>>x+2 #計(jì)算1/4+2Fraction(9,4)>>>x-2 #計(jì)算1/4-2Fraction(-7,4)>>>x*2 #計(jì)算1/4*2Fraction(1,2)>>>x/2 #計(jì)算1/4除以2Fraction(1,8)分?jǐn)?shù)的打印格式和其在交互模式下直接顯示的樣式有所不同,示例代碼如下。>>>x=Fraction(2,8)>>>x #交互模式直接顯示分?jǐn)?shù)Fraction(1,4)>>>print(x) #打印分?jǐn)?shù)1/4可以使用Fraction.from_float()函數(shù)將浮點(diǎn)數(shù)轉(zhuǎn)換為分?jǐn)?shù),示例代碼如下。>>>Fraction.from_float(1.25)Fraction(5,4)任務(wù)3-2:計(jì)算“奮斗者”號(hào)下潛速度【任務(wù)目標(biāo)】“奮斗者”號(hào)是我國(guó)自主研發(fā)的全海深載人潛水器。2023年3月11日,“探索一號(hào)”科考船攜“奮斗者”號(hào)全海深載人潛水器抵達(dá)三亞,圓滿完成國(guó)際首次環(huán)大洋洲載人深潛科考航次任務(wù)。該次航行歷時(shí)157天,環(huán)大洋洲航行22000余海里。航次期間,科考隊(duì)在西南太平洋克馬德克海溝區(qū)域開(kāi)展了國(guó)際首次大范圍、系統(tǒng)性的載人深潛調(diào)查,并在人類歷史上首次抵達(dá)東南印度洋蒂阿曼蒂那深淵和瓦萊比-熱恩斯深淵底部開(kāi)展實(shí)地觀察和取樣。任務(wù)3-2:計(jì)算“奮斗者”號(hào)下潛速度“奮斗者”號(hào)全海深載人潛水器這一科技創(chuàng)新成果全面體現(xiàn)了黨的二十大報(bào)告精神:“加快實(shí)施創(chuàng)新驅(qū)動(dòng)發(fā)展戰(zhàn)略。堅(jiān)持面向世界科技前沿、面向經(jīng)濟(jì)主戰(zhàn)場(chǎng)、面向國(guó)家重大需求、面向人民生命健康,加快實(shí)現(xiàn)高水平科技自立自強(qiáng)?!?020年11月10日,“奮斗者”號(hào)首次海試直接挑戰(zhàn)萬(wàn)米并一舉成功?!皧^斗者”號(hào)當(dāng)日4時(shí)50分開(kāi)始下潛,到7時(shí)42分突破萬(wàn)米大關(guān),用時(shí)2小時(shí)52分。試著編寫(xiě)一個(gè)程序計(jì)算“奮斗者”號(hào)首次海試突破萬(wàn)米的平均下潛速度。程序運(yùn)行結(jié)果如下?!皧^斗者”號(hào)首次海試突破萬(wàn)米的平均下潛速度:0.9689922480620154米/秒【任務(wù)實(shí)施】演示過(guò)程……3.2數(shù)字運(yùn)算本節(jié)主要內(nèi)容:數(shù)字運(yùn)算數(shù)字處理函數(shù)3.2.1數(shù)字運(yùn)算操作符說(shuō)明舉例**冪運(yùn)算2**3~按位取反~5-負(fù)號(hào)-5*、%、/、//乘法、求余數(shù)、真除法、floor除法2*3、3%2、5/2、5//2+、-加法、減法2+3、2-3<<、>>向左移位、向右移位3<<2、12>>2&按位與5&2^按位異或5^2|按位或5|2<、<=、>、>=、==、!=小于、小于等于、大于、大于等于、相等、不等2<3、2<=3、2>3、2>=3、2==3、2!=3not邏輯非notTrue、not2<3and邏輯與x>5andx<100or邏輯或x<5orx>1001.計(jì)算的優(yōu)先級(jí)表3-1中操作符的運(yùn)算優(yōu)先級(jí)按從上到下的順序依次降低。可以用括號(hào)(括號(hào)優(yōu)先級(jí)最高)改變計(jì)算順序示例代碼如下。>>>2+3*5 17>>>(2+3)*5252.計(jì)算中的自動(dòng)數(shù)據(jù)類型轉(zhuǎn)換在運(yùn)算過(guò)程中遇到不同類型的數(shù)字時(shí),Python總是將簡(jiǎn)單的類型轉(zhuǎn)換為復(fù)雜的類型,示例代碼如下。>>>2+3.5,type(2+3.5)(5.5,<class'float'>)>>>2+3.5+(2+3j),type(2+3.5+(2+3j))((7.5+3j),<class'complex'>)數(shù)字類型復(fù)雜度從低到高依次為:布爾型、整型、浮點(diǎn)數(shù)類型、復(fù)數(shù)類型。3.求余數(shù)“x%y”計(jì)算x除以y的余數(shù),余數(shù)符號(hào)與y一致。若存在一個(gè)操作數(shù)為浮點(diǎn)數(shù),則結(jié)果為浮點(diǎn)數(shù),否則為整數(shù)示例代碼如下。>>>5%2,5%-2,-5%2,-5%-2(1,-1,1,-1)>>>5%2.0,5%-2.0,-5%2.0,-5%-2.0(1.0,-1.0,1.0,-1.0)4.真除法和floor除法“/”運(yùn)算稱為真除法,這是為了與傳統(tǒng)除法進(jìn)行區(qū)分。在Python3.0之前的版本中,“/”運(yùn)算在兩個(gè)操作數(shù)都是整數(shù)時(shí),計(jì)算結(jié)果只保留整數(shù)部分(稱為截?cái)喑ǎ?;如果有一個(gè)操作數(shù)是浮點(diǎn)數(shù),則計(jì)算結(jié)果為浮點(diǎn)數(shù),保留小數(shù)部分。自Python3.0起,“/”運(yùn)算結(jié)果為浮點(diǎn)數(shù),保留小數(shù)部分。>>>4/2,5/2(2.0,2.5)floor除法“//”運(yùn)算稱為floor除法。“x//y”運(yùn)算的結(jié)果為不大于“x/y”結(jié)果的最大整數(shù)。當(dāng)兩個(gè)操作數(shù)都是整型時(shí),結(jié)果為整型,否則為浮點(diǎn)數(shù)類型示例代碼如下。>>>5//2,5//-2,-5//2,-5//-2 #操作數(shù)都是int類型,結(jié)果為int類型(2,-3,-3,2)>>>5//2.0,5//-2.0,-5//2.0,-5//-2.0#操作數(shù)中一個(gè)是float類型,結(jié)果為float類型(2.0,-3.0,-3.0,2.0)5.位運(yùn)算位運(yùn)算:~、&、^、|、<<、>>,按操作數(shù)的二進(jìn)制位進(jìn)行操作。(1)按位取反“~”操作數(shù)的二進(jìn)制位中,1取反為0,0取反為1,符號(hào)位也取反。>>>~5 #5的8位二進(jìn)制形式為00000101,按位取反為11111010,即-6-6>>>~-5 #-5的8位二進(jìn)制形式為11111011,按位取反為00000100,即44在計(jì)算機(jī)內(nèi)部,數(shù)的位數(shù)與計(jì)算機(jī)字長(zhǎng)一致。這里為了方便,用8位進(jìn)行說(shuō)明。計(jì)算機(jī)內(nèi)部,數(shù)都使用補(bǔ)碼進(jìn)行表示。正數(shù)的補(bǔ)碼與原碼一致。例如,6的原碼和補(bǔ)碼均為00000110,-6的原碼為10000110,補(bǔ)碼為11111010。(2)按位與“&”將兩個(gè)操作數(shù)按其相同位置的數(shù)執(zhí)行“與”操作,兩個(gè)位上都是1時(shí),與的結(jié)果為1,否則為0,示例代碼如下。>>>4&5 #4的二進(jìn)制形式為00000100,5為00000101,所以結(jié)果為000001004>>>-4&5 #-4的二進(jìn)制形式為11111100,5為00000101,所以結(jié)果為000001004(3)按位異或“^”按位異或在相同位上的數(shù)相同時(shí)結(jié)果為0,否則為1示例代碼如下。>>>4^51>>>-4^5-7(4)按位或“|”按位或在相同位上的數(shù)有一個(gè)為1時(shí)結(jié)果為1,否則為0示例代碼如下。>>>4|55>>>-4|5-3(5)向左移位“<<”“x<<y”表示將x按二進(jìn)制形式向左移動(dòng)y位,末尾補(bǔ)0,符號(hào)位保持不變向左移動(dòng)1位等同于乘以2示例代碼如下。>>>1<<24>>>-1<<2-4(6)向右移位“>>”“x>>y”表示將x按二進(jìn)制形式向右移動(dòng)y位,符號(hào)位保持不變向右移動(dòng)1位等同于除以2示例代碼如下。>>>8>>22>>>-8>>2-26.比較運(yùn)算比較運(yùn)算的結(jié)果為布爾值(True或False)示例代碼如下。>>>2>3False>>>2<3.0TruePython允許將連續(xù)的多個(gè)比較運(yùn)算符進(jìn)行縮寫(xiě)。示例代碼如下。>>>a=1>>>b=3>>>c=5>>>a<b<c #等價(jià)于a<bandb<cTrue>>>a==b<c #等價(jià)于a==bandb<cFalse>>>a<b>c #等價(jià)于a<bandb>cFalse7.邏輯運(yùn)算邏輯運(yùn)算(也稱布爾運(yùn)算)指布爾值(True或False)執(zhí)行not、and或or運(yùn)算。在判斷True或False之外的數(shù)據(jù)是否為邏輯值時(shí),Python將屬于下列情況的值都視為False。None。各種數(shù)字類型的0,如0、0.0、(0+0j)等??盏男蛄?,如''、()、[]等??盏挠成?,如{}。如果自定義類包含__bool__()方法或__len__()方法,當(dāng)類的實(shí)例對(duì)象的__bool__()方法返回False或__len__()方法返回0時(shí),實(shí)例對(duì)象視為False。上述情況之外的值則視為T(mén)rue。(1)邏輯非notnotTrue為False,notFalse為T(mén)rue示例代碼如下。>>>notTrue,notFalse(False,True)>>>notNone,not0,not'',not{}(True,True,True,True)(2)邏輯與and“xandy”在兩個(gè)操作數(shù)都為T(mén)rue時(shí),結(jié)果才為T(mén)rue,否則為False。當(dāng)x為False時(shí),“xandy”運(yùn)算結(jié)果為False,Python不會(huì)再計(jì)算y示例代碼如下。>>>TrueandTrue,TrueandFalse,FalseandTrue,FalseandFalse(True,False,False,False)(3)邏輯或or“xory”在兩個(gè)操作數(shù)都為False時(shí),結(jié)果才為False,否則為T(mén)rue當(dāng)x為T(mén)rue時(shí),“xory”運(yùn)算結(jié)果為T(mén)rue,Python不會(huì)再計(jì)算y示例代碼如下。>>>TrueorTrue,TrueorFalse,FalseorTrue,FalseorFalse(True,True,True,False)3.2.2數(shù)字處理函數(shù)1.內(nèi)置的常用數(shù)學(xué)函數(shù)下面通過(guò)交互模式的實(shí)際例子說(shuō)明部分常用的內(nèi)置數(shù)學(xué)函數(shù)。2.math模塊Python在math模塊中提供了常用的數(shù)學(xué)常量和函數(shù),要使用這些函數(shù)需要先導(dǎo)入math模塊示例。任務(wù)3-3:格式化輸出《題西林壁》【任務(wù)目標(biāo)】編寫(xiě)一個(gè)程序,格式化輸出《題西林壁》,程序運(yùn)行結(jié)果如下。

題西林壁

蘇軾橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同。不識(shí)廬山真面目,只緣身在此山中?!救蝿?wù)實(shí)施】演示過(guò)程……3.3字符串類型本節(jié)主要內(nèi)容:字符串常量字符串操作符字符串的索引字符串的切片迭代字符串字符串處理函數(shù)字符串處理方法字符串的格式化bytes字符串3.3.1字符串常量Python字符串常量可用下列多種方法表示。單引號(hào):'a'、'123'、'abc'。雙引號(hào):"a"、"123"、"abc"。三個(gè)單引號(hào)或雙引號(hào):'''Pythoncode'''、"""Pythonstring""",三引號(hào)字符串可以包含多行字符。帶“r”或“R”前綴的Raw字符串:r'abc\n123'、R'abc\n123'。帶“u”或“U”前綴的Unicode字符串:u'asdf'、U'asdf',字符串默認(rèn)為Unicode字符串,“u”或“U”前綴可以省略。字符串都是str類型的對(duì)象,可用內(nèi)置的str函數(shù)來(lái)創(chuàng)建字符串對(duì)象,示例代碼如下。>>>x=str(123) #用數(shù)字創(chuàng)建字符串對(duì)象>>>x'123'>>>type(x) #測(cè)試字符串對(duì)象類型<class'str'>>>>x=str('abc12') #用字符串常量創(chuàng)建字符串對(duì)象>>>x'abc121.單引號(hào)與雙引號(hào)在表示字符串常量時(shí),單引號(hào)和雙引號(hào)沒(méi)有區(qū)別。在單引號(hào)字符串中可嵌入雙引號(hào),在雙引號(hào)字符串中可嵌入單引號(hào),示例代碼如下。>>>'123"abc''123"abc'>>>"123'abc""123'abc">>>print('123"abc',"123'abc")123"abc123'abc在交互模式下,直接顯示字符串時(shí),默認(rèn)用單引號(hào)表示。如果字符串中有單引號(hào),則用雙引號(hào)表示。注意,字符串打印時(shí),不會(huì)顯示表示字符串的單引號(hào)或雙引號(hào)。2.三引號(hào)三引號(hào)通常用于表示多行字符串(也稱塊字符),示例代碼如下。>>>x="""Thisis aPython multilinestring.""">>>x'Thisis\n\taPython\n\tmultilinestring.'>>>print(x)Thisis aPython multilinestring.注意交互模式下,直接顯示時(shí),字符串中的各種控制字符以轉(zhuǎn)義字符的形式顯示,與打印格式有所區(qū)別。三引號(hào)的另一種作用是為文檔添加注釋,將被三引號(hào)包含的代碼塊作為注釋,在執(zhí)行時(shí)被忽略,示例代碼如下。"""這是三引號(hào)字符串注釋ifx>0:print(x,'是正數(shù)')else:print(x,'不是正數(shù)')注釋結(jié)束"""x='123'print(type(x))3.轉(zhuǎn)義字符轉(zhuǎn)義字符用于表示不能直接表示的特殊字符。Python常用轉(zhuǎn)義字符如表所示轉(zhuǎn)義字符說(shuō)明\\反斜線\'單引號(hào)\"雙引號(hào)\a響鈴符\b退格符\f換頁(yè)符\n換行符\r回車符\t水平制表符\v垂直制表符\0Null,空字符\ooo3位八進(jìn)制數(shù)表示的Unicode碼對(duì)應(yīng)字符\xhh2位十進(jìn)制數(shù)表示的Unicode碼對(duì)應(yīng)字符在C語(yǔ)言中,字符串以空字符作為字符串結(jié)束符號(hào),Python把空字符串作為一個(gè)字符處理示例代碼如下。>>>x='\0\101\102'>>>x'\x00AB'>>>print(x) #打印字符串AB>>>len(x) #求字符串長(zhǎng)度34.Raw字符串Python不會(huì)解析Raw字符串中的轉(zhuǎn)義字符。Raw字符串的典型應(yīng)用是表示W(wǎng)indows系統(tǒng)中的文件路徑。mf=open('D:\temp\newpy.py','r')open語(yǔ)句試圖打開(kāi)“D:\temp”目錄中的newpy.py文件,Python會(huì)將文件名字符串中的“\t”和“\n”處理為轉(zhuǎn)義字符,從而導(dǎo)致錯(cuò)誤??蓪⑽募址械姆葱本€表示為轉(zhuǎn)移符。 mf=open('D:\\temp\\newpy.py','r')更簡(jiǎn)單的辦法是用Raw字符串來(lái)表示文件名字符串。 mf=open(r'D:\temp\newpy.py','r')另一種替代辦法是用正斜線表示文件名中的路徑分隔符。

mf=open('D:/temp/newpy.py','r')3.3.2字符串操作符1.in字符串是字符的有序集合,可用in操作符判斷字符串包含關(guān)系>>>x='abcdef'>>>'a'inxTrue>>>'cde'inxTrue>>>'12'inxFalse2.空格以空格分隔(或者沒(méi)有分隔符號(hào))的多個(gè)字符串可自動(dòng)合并,示例代碼如下。>>>'12''34''56' '123456'3.加號(hào)加法運(yùn)算將多個(gè)字符串合并,示例代碼如下。>>>'12'+'34'+'56' '123456'4.星號(hào)星號(hào)用于將字符串復(fù)制多次以構(gòu)成新的字符串。>>>'12'*3'121212'5.逗號(hào)在使用逗號(hào)分隔字符時(shí),會(huì)創(chuàng)建用字符串組成的元組>>>x='abc','def'>>>x('abc','def')>>>type(x)<class'tuple'>3.3.3字符串的索引字符串中的各個(gè)字符可通過(guò)位置進(jìn)行索引。字符串中的字符按從左到右的順序,索引值依次為0,1,2,…,len-1(最后一個(gè)字符的索引值為字符串長(zhǎng)度減1);或者為-len,…,-2,-1。索引指通過(guò)偏移量來(lái)定位字符串中的單個(gè)字符,示例代碼如下。>>>x='abcdef'>>>x[0] #索引第1個(gè)字符'a'>>>x[-1] #索引最后1個(gè)字符'f'>>>x[3] #索引第4個(gè)字符'd'索引可獲得指定位置的單個(gè)字符,但不能通過(guò)索引來(lái)修改字符串。因?yàn)樽址畬?duì)象不允許被修改,示例代碼如下。>>>x='abcd'>>>x[0]=‘1’#試圖修改字符串中的指定字符,出錯(cuò)Traceback(mostrecentcalllast):File"<pyshell#54>",line1,in<module>x[0]='1'TypeError:'str'objectdoesnotsupportitemassignment3.3.4字符串的切片字符串的切片指利用索引值范圍從字符串中獲得連續(xù)的多個(gè)字符(子字符串)。字符串切片的基本格式如下。x[start:end]返回字符串x中從偏移量start開(kāi)始、到偏移量end之前的子字符串。start和end參數(shù)均可省略,start默認(rèn)為0,end默認(rèn)為字符串長(zhǎng)度>>>x='abcdef'>>>x[1:4] #返回偏移量為1到3的字符'bcd'>>>x[1:] #返回偏移量為1到末尾的字符'bcdef'>>>x[:4] #返回從字符串開(kāi)頭到偏移量為3的字符'abcd'>>>x[:-1] #除最后一個(gè)字符,其他字符全部返回'abcde'>>>x[:] #返回全部字符'abcdef'默認(rèn)情況下,切片是返回字符串中的多個(gè)連續(xù)字符,可以通過(guò)步長(zhǎng)參數(shù)來(lái)跳過(guò)中間的字符,其基本格式如下。

x[start:end:step]用這種格式切片時(shí),會(huì)依次跳過(guò)中間step-1個(gè)字符,step默認(rèn)為1>>>x='0123456789'>>>x[1:7:2] #返回偏移量為1、3、5的字符'135'>>>x[::2] #返回偏移量為偶數(shù)的全部字符'02468'>>>x[7:1:-2] #返回偏移量為7、5、3的字符'753'>>>x[::-1] #將字符串反序返回'9876543210'3.3.5迭代字符串字符串是有序的字符集合,可用for循環(huán)迭代處理字符串,示例代碼如下。>>>forain'abc': #變量a依次表示字符串中的每個(gè)字符...print(a)...abc3.3.6字符串處理函數(shù)1.求字符串長(zhǎng)度字符串長(zhǎng)度指字符串中包含的字符個(gè)數(shù)可用len()函數(shù)獲得字符串長(zhǎng)度,示例代碼如下。>>>len('abcdef')62.字符串轉(zhuǎn)換可用str()函數(shù)將非字符串?dāng)?shù)據(jù)轉(zhuǎn)換為字符串,示例代碼如下。>>>str(123) #將整數(shù)轉(zhuǎn)換為字符串'123'>>>str(1.23) #將浮點(diǎn)數(shù)轉(zhuǎn)換為字符串'1.23'>>>str(2+4j) #將復(fù)數(shù)轉(zhuǎn)換為字符串'(2+4j)'>>>str([1,2,3]) #將列表轉(zhuǎn)換為字符串'[1,2,3]'>>>str(True) #將布爾常量轉(zhuǎn)換為字符串'True'在轉(zhuǎn)換數(shù)字時(shí),repr()和str()的效果相同。在處理字符串時(shí),repr()會(huì)將一對(duì)表示字符串常量的單引號(hào)添加到轉(zhuǎn)換之后的字符串中>>>str(123),repr(123)('123','123')>>>str('123'),repr('123')('123',"'123'")>>>str("123"),repr("123")('123',"'123'")3.求字符Unicode碼ord()函數(shù)返回字符的Unicode碼。>>>ord('A')65>>>ord('中')200134.將Unicode碼轉(zhuǎn)換為字符chr()函數(shù)返回Unicode碼對(duì)應(yīng)的字符。>>>chr(65)'A'>>>chr(20013)'中'3.3.7字符串處理方法字符串是str類型的對(duì)象字符串處理方法調(diào)用格式:

字符串.方法()1.capitalize()將字符串第一個(gè)字母大寫(xiě),其余字母小寫(xiě),返回新的字符串。>>>'thisisPython'.capitalize()'Thisispython'2.count(sub[,start[,end]])返回字符串sub在當(dāng)前字符串的[start,end]范圍內(nèi)出現(xiàn)的次數(shù),省略范圍時(shí)會(huì)查找整個(gè)字符串。>>>'abcabcabc'.count('ab') #在字符中統(tǒng)計(jì)ab出現(xiàn)的次數(shù)3>>>'abcabcabc'.count('ab',2) #從第3個(gè)字符開(kāi)始統(tǒng)計(jì)23.endswith(sub[,start[,end]])判斷當(dāng)前字符串的[start,end]范圍內(nèi)的子字符串是否以sub字符串結(jié)尾示例代碼如下。>>>'abcabcabc'.endswith('bc')True>>>'abcabcabc'.endswith('b')False4.startswith(sub[,start[,end]])判斷當(dāng)前字符串的[start,end]范圍內(nèi)的子字符串是否以sub字符串開(kāi)頭示例代碼如下。>>>'abcd'.startswith('ab')True>>>'abcd'.startswith('ac')False5.expandtabs(tabsize=8)將字符串中的Tab字符替換為空格,參數(shù)默認(rèn)為8,即將一個(gè)Tab字符替換為8個(gè)空格,示例代碼如下。>>>x='12\t34\t56'>>>x'12\t34\t56'>>>x.expandtabs() #默認(rèn)將每個(gè)Tab字符替換為8個(gè)空格'123456'>>>x.expandtabs(0) #參數(shù)為0時(shí)刪除全部Tab字符'123456'>>>x.expandtabs(4) #將每個(gè)Tab字符替換為4個(gè)空格'123456'6.find(sub[,start[,end]])在當(dāng)前字符串的[start,end]范圍內(nèi)查找子字符串sub,返回sub第一次出現(xiàn)的位置,沒(méi)有找到時(shí)返回-1,示例代碼如下。>>>x='abcdabcd'>>>x.find('ab')0>>>x.find('ab',2)4>>>x.find('ba')-17.index(sub[,start[,end]])與find()方法相同,只是在未找到子字符串時(shí)產(chǎn)生ValueError異常,示例代碼如下。>>>x='abcdabcd'>>>x.index('ab')0>>>x.index('ab',2)4>>>x.index('ba')Traceback(mostrecentcalllast):File"<pyshell#7>",line1,in<module>x.index('ba')ValueError:substringnotfound8.rfind(sub[,start[,end]])在當(dāng)前字符串的[start,end]范圍內(nèi)查找子字符串sub,返回sub最后一次出現(xiàn)的位置,沒(méi)有找到時(shí)返回-1,示例代碼如下。>>>'abcdabcd'.rfind('ab')49.rindex(sub[,start[,end]])與rfind()方法相同,只是在未找到子字符串時(shí)產(chǎn)生ValueError異常示例代碼如下。>>>'abcdabcd'.rindex('ab')410.format(args)字符串格式化,將字符串中用“{}”定義的替換域依次用參數(shù)args中的數(shù)據(jù)替換示例代碼如下。>>>'Mynameis{0},ageis{1}'.format('Tome',23)'MynameisTome,ageis23'>>>'{0},{1},{0}'.format(1,2) #重復(fù)使用替換域'1,2,1'11.format_map(map)使用字典完成字符串格式化,示例代碼如下。>>>'Mynameis{name},ageis{age}'.format_map({'name':'Tome','age':23})'MynameisTome,ageis23'12.isalnum()當(dāng)字符串不為空且不包含任何非數(shù)字或字母(包括各國(guó)文字)的字符時(shí)返回True,否則返回False。>>>'123'.isalnum()True>>>'123a'.isalnum()True>>>'123#asd'.isalnum() #包含非數(shù)字或字母的字符False>>>''.isalnum() #空字符串,返回FalseFalse>>>'中國(guó)'.isalnum()True13.isalpha()字符串不為空且其中的全部字符都是字母(包括各國(guó)文字)時(shí)返回True,否則返回False,示例代碼如下。>>>'abc'.isalpha()True>>>'abc@#'.isalpha()False>>>''.isalpha()False>>>'ab13'.isalpha()False>>>'中國(guó)'.isalpha()True>>>'中國(guó)!'.isalpha()False14.isdecimal()字符串不為空且其中的字符全部是數(shù)字時(shí)返回True,否則返回False,示例代碼如下。>>>'123'.isdecimal()True>>>'+12.3'.isdecimal()False>>>'12.3'.isdecimal()False15.islower()字符串中的字母全部是小寫(xiě)字母時(shí)返回True,否則返回False示例代碼如下。>>>'abc123'.islower()True>>>'Abc123'.islower()False16.isupper()字符串中的字母全部是大寫(xiě)字母時(shí)返回True,否則返回False示例代碼如下。>>>'ABC123'.isupper()True>>>'aBC123'.isupper()False17.isspace()字符串中的字符全部是空格時(shí)返回True,否則返回False示例代碼如下。>>>''.isspace()True>>>'abcd'.isspace()False>>>''.isspace()False18.ljust(width[,fillchar])當(dāng)字符串長(zhǎng)度小于width時(shí),在字符串末尾填充fillchar,使其長(zhǎng)度等于width。默認(rèn)填充字符為空格示例代碼如下。>>>'abc'.ljust(8)'abc'>>>'abc'.ljust(8,'=')'abc====='19.rjust(width[,fillchar])與ljust()方法類似,只是在字符串開(kāi)頭填充字符示例代碼如下。>>>'abc'.rjust(8)'abc'>>>'abc'.rjust(8,'0')'00000abc'20.lower()將字符串中的字母全部轉(zhuǎn)換成小寫(xiě),示例代碼如下。>>>'ThisisABC'.lower()'thisisabc'21.upper()將字符串中的字母全部轉(zhuǎn)換成大寫(xiě),示例代碼如下。>>>'ThisisABC'.upper()'THISISABC'22.lstrip([chars])未指定參數(shù)chars時(shí),刪除字符串開(kāi)頭的空格、回車符以及換行符,否則刪除字符串開(kāi)頭包含在chars中的字符,示例代碼如下。>>>'\n\rabc'.lstrip()'abc'>>>'abc123abc'.lstrip('ab')'c123abc'>>>'abc123abc'.lstrip('ba')'c123abc'23.rstrip([chars])未指定參數(shù)chars時(shí),刪除字符串末尾的空格、回車符以及換行符,否則刪除字符串末尾包含在chars中的字符示例代碼如下。>>>'\nabc\r\n'.rstrip()'\nabc'>>>'abc123abc'.rstrip('abc')'abc123'>>>'abc123abc'.rstrip('cab')'abc123'24.strip([chars])未指定參數(shù)chars時(shí),刪除字符串首尾的空格、回車符以及換行符,否則刪除字符串首尾包含在chars中的字符示例代碼如下。>>>'\n\rabc\r\n'.strip()'abc'>>>''.strip('wcn') '..'25.partition(sep)參數(shù)sep是一個(gè)字符串,將當(dāng)前字符串從sep第一次出現(xiàn)的位置分隔成3部分:sep之前、sep和sep之后,返回一個(gè)三元組。沒(méi)有找到sep時(shí),返回由字符串本身和兩個(gè)空格組成的三元組,示例代碼如下。>>>'abc123abc123abc123'.partition('12')('abc','12','3abc123abc123')>>>'abc123abc123abc123'.partition('13')('abc123abc123abc123','','')26.rpartition(sep)與partition()類似,只是從當(dāng)前字符串末尾開(kāi)始查找第一個(gè)sep示例代碼如下。>>>'abc123abc123abc123'.rpartition('abc')('abc123abc123','abc','123')>>>'abc123abc123abc123'.partition('ba')('abc123abc123abc123','','')27.replace(old,new[,count])將當(dāng)前字符串包含的old字符串替換為new字符串,省略count時(shí)會(huì)替換全部old字符串。指定count時(shí),最多替換count次,示例代碼如下。>>>x='ab12'*4>>>x'ab12ab12ab12ab12'>>>x.replace('12','000') #全部替換'ab000ab000ab000ab000'>>>x.replace('12','00',2) #替換2次'ab00ab00ab12ab12'28.split([sep],[maxsplit])將字符串按照sep指定的分隔字符串分解,返回包含分解結(jié)構(gòu)的列表。省略sep時(shí),以空格作為分隔符。maxsplit指定分解次數(shù)。>>>'abcdef'.split() #按默認(rèn)的空格分解['ab','cd','ef']>>>'ab,cd,ef'.split(',') #按指定字符分解['ab','cd','ef']>>>'ab,cd,ef'.split(',',maxsplit=1) #指定分解次數(shù)['ab','cd,ef']29.swapcase()將字符串中的字母大小寫(xiě)互換,示例代碼如下。>>>'abcDEF'.swapcase()'ABCdef'30.zfill(width)如果字符串長(zhǎng)度小于width,則在字符串開(kāi)頭填充0,使其長(zhǎng)度等于width。如果第一個(gè)字符為加號(hào)或減號(hào),則在加號(hào)或減號(hào)之后填充0示例代碼如下。>>>'abc'.zfill(8)'00000abc'>>>'+12'.zfill(8)'+0000012'>>>'-12'.zfill(8)'-0000012'>>>'+ab'.zfill(8)'+00000ab'3.3.8字符串的格式化字符串格式化表達(dá)式用“%”表示,基本格式如下。格式字符串%(參數(shù)1,參數(shù)2……)“%”之前為格式字符串,“%”之后為需要填入格式字符串中的參數(shù)。多個(gè)參數(shù)之間用逗號(hào)分隔。只有一個(gè)參數(shù)時(shí),可省略圓括號(hào)。在格式字符串中,用格式控制符代表要填入的參數(shù)的格式。>>>'float(%s)'%5'float(5)'>>>"The%s'spriceis%4.2f"%('apple',2.5)"Theapple'spriceis2.50"表3-3Python格式控制符格式控制符說(shuō)明s將非str類型的對(duì)象用str()函數(shù)轉(zhuǎn)換為字符串r將非str類型的對(duì)象用repr()函數(shù)轉(zhuǎn)換為字符串c參數(shù)為單個(gè)字符(包括各國(guó)文字)或字符的Unicode碼,將Unicode碼轉(zhuǎn)化為對(duì)應(yīng)的字符d、i參數(shù)為數(shù)字,轉(zhuǎn)換為帶符號(hào)的十進(jìn)制整數(shù)o參數(shù)為數(shù)字,轉(zhuǎn)換為帶符號(hào)的八進(jìn)制整數(shù)x參數(shù)為數(shù)字,轉(zhuǎn)換為帶符號(hào)的十六進(jìn)制整數(shù),字母小寫(xiě)X參數(shù)為數(shù)字,轉(zhuǎn)換為帶符號(hào)的十六進(jìn)制整數(shù),字母大寫(xiě)e將數(shù)字轉(zhuǎn)換為科學(xué)計(jì)數(shù)法格式(小寫(xiě))E將數(shù)字轉(zhuǎn)換為科學(xué)計(jì)數(shù)法格式(大寫(xiě))f、F將數(shù)字轉(zhuǎn)換為十進(jìn)制浮點(diǎn)數(shù)g浮點(diǎn)格式。如果指數(shù)小于-4或不小于精度(默認(rèn)為6)則使用小寫(xiě)指數(shù)格式,否則使用十進(jìn)制格式。G浮點(diǎn)格式。如果指數(shù)小于-4或不小于精度(默認(rèn)為6)則使用大寫(xiě)指數(shù)格式,否則使用十進(jìn)制格式。格式控制符的基本格式如下。%[name][flags][width[.precision]]格式控制符其中:name為圓括號(hào)括起來(lái)的字典對(duì)象的鍵width指定數(shù)字的寬度precision指定數(shù)字的小數(shù)位數(shù)lags為標(biāo)識(shí)符flags可使用下列符號(hào)?!?”:在數(shù)值前面添加正數(shù)(+)或負(fù)數(shù)(-)符號(hào)?!?”:在指定數(shù)字寬度時(shí),當(dāng)數(shù)字位數(shù)小于寬度時(shí),將數(shù)字左對(duì)齊,末尾填充空格。“0”:在指定數(shù)字寬度時(shí),當(dāng)數(shù)字位數(shù)小于寬度時(shí),在數(shù)字前面填充0。和“+”“-”同時(shí)使用時(shí),“0”標(biāo)識(shí)不起作用?!啊保嚎崭?,在正數(shù)前面添加一個(gè)空格表示符號(hào)位。1.格式控制符“s”與“r”“s”用于將非str對(duì)象用str()函數(shù)轉(zhuǎn)換為字符串“r”用于將非str類型的對(duì)象用repr()函數(shù)轉(zhuǎn)換為字符串示例代碼如下。>>>'%s%s%s'%(123,1.23,'abc') #格式化整數(shù)、浮點(diǎn)數(shù)和字符串'1231.23abc'>>>'%r%r%r'%(123,1.23,'abc') #格式化整數(shù)、浮點(diǎn)數(shù)和字符串"1231.23'abc'"2.轉(zhuǎn)換單個(gè)字符格式控制符“c”用于轉(zhuǎn)換單個(gè)字符,參數(shù)可以是單個(gè)字符或字符的Unicode碼示例代碼如下。>>>'123%c%c'%('a',65)'123aA'3.整數(shù)的左對(duì)齊與寬度在用width指定數(shù)字寬度時(shí),若數(shù)字位數(shù)小于指定寬度時(shí),默認(rèn)在左側(cè)填充空格可用標(biāo)識(shí)符“0”表示填充0而不是空格。若使用了左對(duì)齊標(biāo)志,則數(shù)字靠左對(duì)齊,并在其后填充空格保證寬度>>>'%d%d'%(123,1.56)#未指定寬度時(shí),數(shù)字原樣轉(zhuǎn)換,%d會(huì)將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)'1231'>>>'%6d'%123 #指定寬度時(shí),默認(rèn)填充空格'123'>>>'%-6d'%123 #指定寬度時(shí),同時(shí)左對(duì)齊'123'>>>'%06d'%123 #指定寬度并填充0'000123'>>>'%-06d'%123 #同時(shí)使用左對(duì)齊并填充0,填充0無(wú)效,用空格代替'123'>>>'%+6d%+6d'%(123,-123) #用加號(hào)表示顯示正負(fù)號(hào),默認(rèn)填充空格'+123-123'>>>'%+06d%+06d'%(123,-123) #用加號(hào)表示顯示正負(fù)號(hào),填充0'+00123-00123'4.將整數(shù)轉(zhuǎn)換為八或十六進(jìn)制格式控制符“o”表示將整數(shù)轉(zhuǎn)換為八進(jìn)制,“x”和“X”表示將整數(shù)轉(zhuǎn)換為十六進(jìn)制,示例如下。>>>'%o%o'%(100,-100) #按默認(rèn)格式轉(zhuǎn)換為八進(jìn)制'144-144'>>>'%8o%8o'%(100,-100) #指定寬度'144-144'>>>'%08o%08o'%(100,-100) #指定寬度并填充0'00000144-0000144'>>>'%x%X'%(445,-445) #按默認(rèn)格式轉(zhuǎn)換為十六進(jìn)制'1bd-1BD'>>>'%8x%8X'%(445,-445) #指定寬度'1bd-1BD'>>>'%08x%08X'%(445,-445) #指定寬度并填充0'000001bd-00001BD'5.轉(zhuǎn)換浮點(diǎn)數(shù)在轉(zhuǎn)換浮點(diǎn)數(shù)時(shí),“%e”“%E”“%f”“%F”“%g”和“%G”略有不同,示例如下。>>>x=12.3456789>>>'%e%f%g'%(x,x,x) '1.234568e+0112.34567912.3457'>>>'%E%F%G'%(x,x,x) #注意%e、%g和%E、%G的大小寫(xiě)區(qū)別'1.234568E+0112.34567912.3457'>>>x=1.234e10>>>'%e%f%g'%(x,x,x)'1.234000e+1012340000000.0000001.234e+10'>>>'%E%F%G'%(x,x,x) '1.234000E+1012340000000.0000001.234E+10'可以為浮點(diǎn)數(shù)指定左對(duì)齊、補(bǔ)零、添加正負(fù)號(hào)、指定寬度和小數(shù)位數(shù)等,示例代碼如下。>>>x=12.3456789>>>'%8.2f%-8.2f%+8.2f%08.2f'%(x,x,x,x)'12.3512.35+12.3500012.35'6.轉(zhuǎn)換字典對(duì)象在格式化字典對(duì)象時(shí),在控制符中用鍵指定對(duì)應(yīng)的字典項(xiàng)示例如下。>>>'%(name)sis%(age)dyearsold'%{'name':'Tome','age':25}'Tomeis25yearsold'3.3.9bytes字符串bytes對(duì)象是一個(gè)不可變的字節(jié)對(duì)象序列,是一種特殊的字符串——稱為bytes字符串。bytes字符串用前綴“b”表示示例代碼如下。單引號(hào):b'a'、b'123'、b'abc'雙引號(hào):b"a"、b"123"、b"abc"三個(gè)單引號(hào)或雙引號(hào):b'''Pythoncode'''、b"""Pythonstring"""在bytes字符串中只能包含ASCII碼字符,示例如下。>>>x=b'abc'>>>xb'abc'>>>type(x) #查看bytes字符串類型<class'bytes'>>>>b'漢字anc' #在bytes字符串中使用非ASCII碼字符時(shí)出錯(cuò)SyntaxError:bytescanonlycontainASCIIliteralcharacters.bytes字符串支持各種字符串操作。不同之處在于,當(dāng)使用索引時(shí),bytes字符串返回對(duì)應(yīng)字符的ASCII碼>>>x=b'abc'>>>x[0] #獲得字符a的ASCII碼9797可將bytes字符串轉(zhuǎn)換為十六進(jìn)制表示的ASCII碼字符串。>>>b'abc'.hex()'616263'綜合實(shí)例:測(cè)試各種數(shù)字運(yùn)算創(chuàng)建一個(gè)Python程序,輸入兩個(gè)整數(shù),執(zhí)行各種數(shù)字運(yùn)算Python3基礎(chǔ)教程第3版慕課版單元4組合數(shù)據(jù)類型任務(wù)4-1:利用集合刪除重復(fù)值【任務(wù)目標(biāo)】從鍵盤(pán)輸入多個(gè)數(shù),刪除重復(fù)值后輸出,程序運(yùn)行結(jié)果如下。請(qǐng)輸入多個(gè)數(shù)(用英文逗號(hào)分隔):1,1,2,2,3,3,4,4,5,5無(wú)重復(fù)的數(shù)據(jù):12345【任務(wù)實(shí)施】演示過(guò)程……4.1集合Python中的集合主要用于保存不重復(fù)的元素。Python中有set(集合)和frozenset(凍結(jié)集合)兩種集合類型,后者在本書(shū)中不做介紹。本書(shū)中提及的“集合”主要指set類型的集合。集合中的元素具有唯一、無(wú)序和不可改變等特點(diǎn)。集合支持?jǐn)?shù)學(xué)理論中的各種集合運(yùn)算。本節(jié)主要內(nèi)容:集合常量集合運(yùn)算集合基本操作4.1.1創(chuàng)建集合集合對(duì)象可用花括號(hào){}表示,其中的元素使用逗號(hào)分隔。也可用內(nèi)置的set()函數(shù)創(chuàng)建集合對(duì)象示例代碼如下。>>>x={1,2,3} #直接使用集合常量>>>x{1,2,3}>>>type(x) #測(cè)試集合對(duì)象的類型名稱<class'set'>>>>set({1,2,3}) #用集合常量做參數(shù)創(chuàng)建集合對(duì)象{1,2,3}>>>set([1,2,3]) #用列表常量做參數(shù)創(chuàng)建集合對(duì)象{1,2,3}>>>set('123abc') #用字符串常量做參數(shù)創(chuàng)建集合對(duì)象{'a','3','b','c','2','1'}>>>set() #創(chuàng)建空集合set()>>>type({}) #{}表示空字典對(duì)象<class'dict'>集合中的元素不允許有重復(fù)值在創(chuàng)建集合對(duì)象時(shí),Python會(huì)自動(dòng)去掉重復(fù)值示例代碼如下。>>>{1,1,2,2}{1,2}>>>set([1,1,2,2]){1,2}Python3.0還引入了集合解析構(gòu)造方法,示例代碼如下。>>>{xforxin[1,2,3,4]} {1,2,3,4}>>>{xforxin'abcd'}{'c','a','b','d'}>>>{x**2forxin[1,2,3,4]}{16,1,4,9}>>>{x*2forxin'abcd'}{'aa','bb','cc','dd'}4.1.2集合運(yùn)算集合對(duì)象支持求長(zhǎng)度、判斷包含、求差集、求并集、求交集、求對(duì)稱差和比較等運(yùn)算,示例代碼如下。>>>x={1,2,'a','bc'}>>>y={1,'a',5}>>>len(x) #求長(zhǎng)度:計(jì)算集合中元素的個(gè)數(shù)4>>>'a'inx #判斷包含:判斷集合是否包括數(shù)據(jù)True>>>x–y #求差集:用屬于x但不屬于y的元素創(chuàng)建新集合{2,'bc'}>>>x|y #求并集:用x、y兩個(gè)集合中的所有元素創(chuàng)建新集合{1,2,'a','bc',5}>>>x&y #求交集:用同時(shí)屬于x和y的元素創(chuàng)建新集合{1,'a'}>>>x^y #求對(duì)稱差:用屬于x但不屬于y以及屬于y但不屬于x的元素創(chuàng)建新集合{2,5,'bc'}>>>x<y #比較:判斷子集和超集的關(guān)系,x是y的子集時(shí)返回True,否則返回FalseFalse>>>{1,2}<xTrue4.1.3集合基本操作集合對(duì)象元素的值不支持修改可以復(fù)制集合、為集合添加或刪除元素示例:>>>x={1,2}>>>y=x.copy() #復(fù)制集合對(duì)象>>>y{1,2}>>>x.add('abc') #為集合添加一個(gè)元素>>>x{1,2,'abc'}>>>x.update({10,20}) #為集合添加多個(gè)元素>>>x{1,2,10,20,'abc'}>>>x.remove(10) #從集合中刪除指定元素>>>x{1,2,20,'abc'}>>>x.remove(50) #刪除不存在元素時(shí)會(huì)報(bào)錯(cuò)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>KeyError:50>>>x.discard(20) #從集合中刪除指定元素>>>x{1,2,'abc'}>>>x.discard(50) #刪除不存在元素時(shí)不報(bào)錯(cuò)>>>x.pop() #從集合中隨機(jī)刪除一個(gè)元素,并返回該元素。1>>>x{2,'abc'}>>>x.clear() #刪除集合中的全部元素>>>xset()集合可用for循環(huán)執(zhí)行迭代操作,示例代碼如下。>>>x={1,2,3}>>>forainx:print(a) …123集合元素是不可改變的,因此不能將可變對(duì)象放入集合中。集合對(duì)象、列表對(duì)象和字典對(duì)象均是可變對(duì)象,所以不能加入集合。元組是不可變對(duì)象,可以作為一個(gè)元素加入集合。>>>x={1,2}>>>x{1,2}>>>x.add({1}) #不能將集合對(duì)象加入集合Traceback(mostrecentcalllast):File"<pyshell#25>",line1,in<module>x.add({1})TypeError:unhashabletype:'set'>>>x.add([1,2,3]) #不能將列表對(duì)象加入集合Traceback(mostrecentcalllast):File"<pyshell#28>",line1,in<module>x.add([1,2,3]TypeError:unhashabletype:'list'>>>x.add({'Mon':1}) #不能將字典對(duì)象加入集合Traceback(mostrecentcalllast):File"<pyshell#29>",line1,in<module>x.add({'Mon':1})TypeError:unhashabletype:'dict'>>>x.add((1,2,3)) #可以將元組加入集合>>>x{1,2,(1,2,3)}任務(wù)4-2:“唐宋八大家”人名排序【任務(wù)目標(biāo)】唐代的韓愈、柳宗元和宋代的蘇洵、蘇軾、蘇轍、歐陽(yáng)修、王安石、曾鞏并稱“唐宋八大家”,將這8人姓名按漢語(yǔ)拼音排序,并分別按從前到后和從后到前的順序輸出,程序運(yùn)行結(jié)果如下?!救蝿?wù)實(shí)施】演示過(guò)程……4.2列表Python將可通過(guò)位置進(jìn)行索引的有限有序集稱為序列。序列可分為可變序列和不可變序列??勺冃蛄袑?duì)象在創(chuàng)建后可以改變,不可變序列在對(duì)象創(chuàng)建后不能改變。字符串、字節(jié)串和元組屬于不可變序列,列表和字節(jié)數(shù)組屬于可變序列。序列支持索引、切片和合并等操作。列表常量用方括號(hào)表示,例如[1,2,'abc']。列表的主要特點(diǎn)如下。列表可以包含任意類型的對(duì)象:數(shù)字、字符串、列表、元組或其他對(duì)象。列表是一個(gè)有序序列。與字符串類似,列表可通過(guò)位置執(zhí)行索引和切片操作。列表是可變的。列表長(zhǎng)度可變,即可添加或刪除列表元素。列表元素的值也可以改變。每個(gè)列表元素存儲(chǔ)的都是對(duì)象的引用,而不是對(duì)象本身,類似于C/C++的指針數(shù)組。4.2.1列表基本操作列表基本操作包括:創(chuàng)建列表求列表長(zhǎng)度合并列表創(chuàng)建包含重復(fù)元素的列表迭代列表關(guān)系判斷列表索引列表切片1.創(chuàng)建列表列表對(duì)象可以用列表常量或list()函數(shù)來(lái)創(chuàng)建,示例代碼如下。>>>[] #創(chuàng)建空列表對(duì)象[]>>>list() #創(chuàng)建空列表對(duì)象[]>>>[1,2,3] #用同類型數(shù)據(jù)創(chuàng)建列表對(duì)象[1,2,3]>>>[1,2,('a','abc'),[12,34]] #用不同類型的數(shù)據(jù)創(chuàng)建列表對(duì)象[1,2,('a','abc'),[12,34]]>>>list('abcd') #用可迭代對(duì)象創(chuàng)建列表對(duì)象['a','b','c','d']>>>list(range(-2,3)) #用連續(xù)整數(shù)創(chuàng)建列表對(duì)象[-2,-1,0,1,2]>>>list((1,2,3)) #用元組創(chuàng)建列表對(duì)象[1,2,3]>>>[x+10forxinrange(5)] #用解析結(jié)構(gòu)創(chuàng)建列表對(duì)象[10,11,12,13,14]2.求長(zhǎng)度可用len()函數(shù)獲得列表長(zhǎng)度,示例代碼如下。>>>len([])0>>>len([1,2,('a','abc'),[3,4]])43.合并加法運(yùn)算可用于合并列表,示例代碼如下。>>>[1,2]+['abc',20][1,2,'abc',20]4.重復(fù)乘法運(yùn)算可用于創(chuàng)建具有重復(fù)值的列表,示例代碼如下。>>>[1,2]*3[1,2,1,2,1,2]5.迭代迭代操作可用于遍歷列表元素,示例代碼如下。>>>x=[1,2,('a','abc'),[12,34]]>>>forainx:print(a)…12('a','abc')[12,34]6.關(guān)系判斷可用in操作符判斷對(duì)象是否屬于列表,示例代碼如下。>>>2in[1,2,3]True>>>'a'in[1,2,3]False7.索引與字符串類似,可通過(guò)位置來(lái)索引列表元素,也可通過(guò)索引修改列表元素。>>>x=[1,2,['a','b']]>>>x[0] #輸出列表的第1個(gè)數(shù)據(jù)1>>>x[2] #輸出列表的第3個(gè)數(shù)據(jù)['a','b']>>>x[-1] #用負(fù)數(shù)從列表末尾開(kāi)始索引['a','b']>>>x[2]=100 #修改列表的第3個(gè)數(shù)據(jù)>>>x[1,2,100]8.列表(切片)與字符串類似,可以通過(guò)切片來(lái)獲得列表中的連續(xù)多個(gè)元素,也可以通過(guò)切片將連續(xù)多個(gè)元素替換成新的元素。>>>x=list(range(10)) #創(chuàng)建列表對(duì)象>>>x[0,1,2,3,4,5,6,7,8,9]>>>x[2:5] #依次返回列表中位置為2、3、4的元素[2,3,4]>>>x[2:] #依次返回列表中位置2開(kāi)始到列表末尾的元素[2,3,4,5,6,7,8,9]>>>x[:5] #依次返回列表開(kāi)頭到位置為4的元素[0,1,2,3,4]

>>>x[3:10:2] #步長(zhǎng)為2,依次返回列表中位置為3、5、7的元素[3,5,7,9]

>>>x[3:10:-2] #步長(zhǎng)為-2,一開(kāi)始3就小于10,切片操作結(jié)束,返回一個(gè)空列表?yè)?jù)[]>>>x[10:3:-2] #步長(zhǎng)為-2,依次返回位置為8、6、4的元素[9,7,5]>>>x[2:5]='abc' #依次用字符串中的3個(gè)字符替換位置為2、3、4的元素>>>x[0,1,'a','b','c',5,6,7,8,9]

>>>x[2:5]=[10,20] #將列表中位置為2、3、4的3個(gè)元素替換為提供的2個(gè)元素?fù)?jù)>>>x[0,1,10,20,5,6,7,8,9]4.2.2常用列表方法1.添加一個(gè)元素append()方法用于在列表末尾添加一個(gè)元素。>>>x=[1,2]>>>x.append('abc')>>>x[1,2,'abc']2.添加多個(gè)元素extend()方法用于在

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論