




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Python3基礎(chǔ)教程第3版慕課版單元3基本數(shù)據(jù)類型任務(wù)3-1:測試數(shù)字的類型和取值范圍【任務(wù)目標(biāo)】在Python交互環(huán)境中測試整數(shù)、浮點(diǎn)數(shù)等數(shù)字的類型和取值范圍,示例代碼如下。>>>type(20)<class'int'>>>>type(0b110)<class'int'>>>>type(0o110)<class'int'>【任務(wù)實(shí)施】演示過程……>>>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ù)(簡稱“整數(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”開頭,數(shù)碼包括0和1。例如0b101、0B11。八進(jìn)制:以“0o”或“0O”開頭,數(shù)碼包括0~7。例如0o15、0O123。十六進(jìn)制:以“0x”或“0X”開頭,數(shù)碼包括0~9、A~F或a~f。例如0x12AB、0x12ab。不同進(jìn)制只是整數(shù)的不同書寫形式,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ù)的基本語法格式如下。int('整數(shù)字符串',n)int()函數(shù)按指定進(jìn)制將整數(shù)字符串轉(zhuǎn)換為對應(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)或其他字符(字符串開頭的空格可以忽略),否則會(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ù)來創(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開始引入了一種新的數(shù)字類型:小數(shù)類型。小數(shù)可以看作是固定精度的浮點(diǎn)數(shù),它有固定的位數(shù)和小數(shù)點(diǎn),可以滿足要求精度的計(jì)算。1.創(chuàng)建和使用小數(shù)對象小數(shù)對象使用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ù)字??墒褂胐ecimal模塊中的上下文對象來設(shè)置小數(shù)的全局精度。首先,調(diào)用decimal模塊的getcontext()函數(shù)獲得當(dāng)前的上下文對象再通過上下文對象的prec屬性設(shè)置全局精度示例代碼如下>>>fromdecimalimport* #導(dǎo)入模塊>>>Decimal('1')/Decimal('3') #用默認(rèn)精度計(jì)算小數(shù)Decimal('0.3333333333333333333333333333')>>>context=getcontext() #獲得上下文對象>>>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ù)返回本地上下文對象再通過本地上下文對象的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ù)對象明確地?fù)碛幸粋€(gè)分子和分母,分子和分母保持最簡。使用分?jǐn)?shù)可以避免浮點(diǎn)數(shù)的不精確性。分?jǐn)?shù)使用fractions模塊中的Fraction()函數(shù)來創(chuàng)建,其基本語法格式如下。x=Fraction(a,b)
其中,a為分子,b為分母,python自動(dòng)計(jì)算為最簡分?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)是我國自主研發(fā)的全海深載人潛水器。2023年3月11日,“探索一號(hào)”科考船攜“奮斗者”號(hào)全海深載人潛水器抵達(dá)三亞,圓滿完成國際首次環(huán)大洋洲載人深潛科考航次任務(wù)。該次航行歷時(shí)157天,環(huán)大洋洲航行22000余海里。航次期間,科考隊(duì)在西南太平洋克馬德克海溝區(qū)域開展了國際首次大范圍、系統(tǒng)性的載人深潛調(diào)查,并在人類歷史上首次抵達(dá)東南印度洋蒂阿曼蒂那深淵和瓦萊比-熱恩斯深淵底部開展實(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)場、面向國家重大需求、面向人民生命健康,加快實(shí)現(xiàn)高水平科技自立自強(qiáng)。”2020年11月10日,“奮斗者”號(hào)首次海試直接挑戰(zhàn)萬米并一舉成功?!皧^斗者”號(hào)當(dāng)日4時(shí)50分開始下潛,到7時(shí)42分突破萬米大關(guān),用時(shí)2小時(shí)52分。試著編寫一個(gè)程序計(jì)算“奮斗者”號(hào)首次海試突破萬米的平均下潛速度。程序運(yùn)行結(jié)果如下?!皧^斗者”號(hào)首次海試突破萬米的平均下潛速度:0.9689922480620154米/秒【任務(wù)實(shí)施】演示過程……3.2數(shù)字運(yùn)算本節(jié)主要內(nèi)容:數(shù)字運(yùn)算數(shù)字處理函數(shù)3.2.1數(shù)字運(yùn)算操作符說明舉例**冪運(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)算過程中遇到不同類型的數(shù)字時(shí),Python總是將簡單的類型轉(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ī)字長一致。這里為了方便,用8位進(jìn)行說明。計(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)行縮寫。示例代碼如下。>>>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í)例對象的__bool__()方法返回False或__len__()方法返回0時(shí),實(shí)例對象視為False。上述情況之外的值則視為True。(1)邏輯非notnotTrue為False,notFalse為True示例代碼如下。>>>notTrue,notFalse(False,True)>>>notNone,not0,not'',not{}(True,True,True,True)(2)邏輯與and“xandy”在兩個(gè)操作數(shù)都為True時(shí),結(jié)果才為True,否則為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,否則為True當(dāng)x為True時(shí),“xory”運(yùn)算結(jié)果為True,Python不會(huì)再計(jì)算y示例代碼如下。>>>TrueorTrue,TrueorFalse,FalseorTrue,FalseorFalse(True,True,True,False)3.2.2數(shù)字處理函數(shù)1.內(nèi)置的常用數(shù)學(xué)函數(shù)下面通過交互模式的實(shí)際例子說明部分常用的內(nèi)置數(shù)學(xué)函數(shù)。2.math模塊Python在math模塊中提供了常用的數(shù)學(xué)常量和函數(shù),要使用這些函數(shù)需要先導(dǎo)入math模塊示例。任務(wù)3-3:格式化輸出《題西林壁》【任務(wù)目標(biāo)】編寫一個(gè)程序,格式化輸出《題西林壁》,程序運(yùn)行結(jié)果如下。
題西林壁
蘇軾橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同。不識(shí)廬山真面目,只緣身在此山中?!救蝿?wù)實(shí)施】演示過程……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類型的對象,可用內(nèi)置的str函數(shù)來創(chuàng)建字符串對象,示例代碼如下。>>>x=str(123) #用數(shù)字創(chuàng)建字符串對象>>>x'123'>>>type(x) #測試字符串對象類型<class'str'>>>>x=str('abc12') #用字符串常量創(chuàng)建字符串對象>>>x'abc121.單引號(hào)與雙引號(hào)在表示字符串常量時(shí),單引號(hào)和雙引號(hào)沒有區(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)義字符說明\\反斜線\'單引號(hào)\"雙引號(hào)\a響鈴符\b退格符\f換頁符\n換行符\r回車符\t水平制表符\v垂直制表符\0Null,空字符\ooo3位八進(jìn)制數(shù)表示的Unicode碼對應(yīng)字符\xhh2位十進(jìn)制數(shù)表示的Unicode碼對應(yīng)字符在C語言中,字符串以空字符作為字符串結(jié)束符號(hào),Python把空字符串作為一個(gè)字符處理示例代碼如下。>>>x='\0\101\102'>>>x'\x00AB'>>>print(x) #打印字符串AB>>>len(x) #求字符串長度34.Raw字符串Python不會(huì)解析Raw字符串中的轉(zhuǎn)義字符。Raw字符串的典型應(yīng)用是表示W(wǎng)indows系統(tǒng)中的文件路徑。mf=open('D:\temp\newpy.py','r')open語句試圖打開“D:\temp”目錄中的newpy.py文件,Python會(huì)將文件名字符串中的“\t”和“\n”處理為轉(zhuǎn)義字符,從而導(dǎo)致錯(cuò)誤??蓪⑽募址械姆葱本€表示為轉(zhuǎn)移符。 mf=open('D:\\temp\\newpy.py','r')更簡單的辦法是用Raw字符串來表示文件名字符串。 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.空格以空格分隔(或者沒有分隔符號(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è)字符可通過位置進(jìn)行索引。字符串中的字符按從左到右的順序,索引值依次為0,1,2,…,len-1(最后一個(gè)字符的索引值為字符串長度減1);或者為-len,…,-2,-1。索引指通過偏移量來定位字符串中的單個(gè)字符,示例代碼如下。>>>x='abcdef'>>>x[0] #索引第1個(gè)字符'a'>>>x[-1] #索引最后1個(gè)字符'f'>>>x[3] #索引第4個(gè)字符'd'索引可獲得指定位置的單個(gè)字符,但不能通過索引來修改字符串。因?yàn)樽址畬ο蟛辉试S被修改,示例代碼如下。>>>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開始、到偏移量end之前的子字符串。start和end參數(shù)均可省略,start默認(rèn)為0,end默認(rèn)為字符串長度>>>x='abcdef'>>>x[1:4] #返回偏移量為1到3的字符'bcd'>>>x[1:] #返回偏移量為1到末尾的字符'bcdef'>>>x[:4] #返回從字符串開頭到偏移量為3的字符'abcd'>>>x[:-1] #除最后一個(gè)字符,其他字符全部返回'abcde'>>>x[:] #返回全部字符'abcdef'默認(rèn)情況下,切片是返回字符串中的多個(gè)連續(xù)字符,可以通過步長參數(shù)來跳過中間的字符,其基本格式如下。
x[start:end:step]用這種格式切片時(shí),會(huì)依次跳過中間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.求字符串長度字符串長度指字符串中包含的字符個(gè)數(shù)可用len()函數(shù)獲得字符串長度,示例代碼如下。>>>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ì)將一對表示字符串常量的單引號(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碼對應(yīng)的字符。>>>chr(65)'A'>>>chr(20013)'中'3.3.7字符串處理方法字符串是str類型的對象字符串處理方法調(diào)用格式:
字符串.方法()1.capitalize()將字符串第一個(gè)字母大寫,其余字母小寫,返回新的字符串。>>>'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è)字符開始統(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字符串開頭示例代碼如下。>>>'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)的位置,沒有找到時(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)的位置,沒有找到時(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ù)字或字母(包括各國文字)的字符時(shí)返回True,否則返回False。>>>'123'.isalnum()True>>>'123a'.isalnum()True>>>'123#asd'.isalnum() #包含非數(shù)字或字母的字符False>>>''.isalnum() #空字符串,返回FalseFalse>>>'中國'.isalnum()True13.isalpha()字符串不為空且其中的全部字符都是字母(包括各國文字)時(shí)返回True,否則返回False,示例代碼如下。>>>'abc'.isalpha()True>>>'abc@#'.isalpha()False>>>''.isalpha()False>>>'ab13'.isalpha()False>>>'中國'.isalpha()True>>>'中國!'.isalpha()False14.isdecimal()字符串不為空且其中的字符全部是數(shù)字時(shí)返回True,否則返回False,示例代碼如下。>>>'123'.isdecimal()True>>>'+12.3'.isdecimal()False>>>'12.3'.isdecimal()False15.islower()字符串中的字母全部是小寫字母時(shí)返回True,否則返回False示例代碼如下。>>>'abc123'.islower()True>>>'Abc123'.islower()False16.isupper()字符串中的字母全部是大寫字母時(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)字符串長度小于width時(shí),在字符串末尾填充fillchar,使其長度等于width。默認(rèn)填充字符為空格示例代碼如下。>>>'abc'.ljust(8)'abc'>>>'abc'.ljust(8,'=')'abc====='19.rjust(width[,fillchar])與ljust()方法類似,只是在字符串開頭填充字符示例代碼如下。>>>'abc'.rjust(8)'abc'>>>'abc'.rjust(8,'0')'00000abc'20.lower()將字符串中的字母全部轉(zhuǎn)換成小寫,示例代碼如下。>>>'ThisisABC'.lower()'thisisabc'21.upper()將字符串中的字母全部轉(zhuǎn)換成大寫,示例代碼如下。>>>'ThisisABC'.upper()'THISISABC'22.lstrip([chars])未指定參數(shù)chars時(shí),刪除字符串開頭的空格、回車符以及換行符,否則刪除字符串開頭包含在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è)三元組。沒有找到sep時(shí),返回由字符串本身和兩個(gè)空格組成的三元組,示例代碼如下。>>>'abc123abc123abc123'.partition('12')('abc','12','3abc123abc123')>>>'abc123abc123abc123'.partition('13')('abc123abc123abc123','','')26.rpartition(sep)與partition()類似,只是從當(dāng)前字符串末尾開始查找第一個(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()將字符串中的字母大小寫互換,示例代碼如下。>>>'abcDEF'.swapcase()'ABCdef'30.zfill(width)如果字符串長度小于width,則在字符串開頭填充0,使其長度等于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格式控制符格式控制符說明s將非str類型的對象用str()函數(shù)轉(zhuǎn)換為字符串r將非str類型的對象用repr()函數(shù)轉(zhuǎn)換為字符串c參數(shù)為單個(gè)字符(包括各國文字)或字符的Unicode碼,將Unicode碼轉(zhuǎn)化為對應(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ù),字母小寫X參數(shù)為數(shù)字,轉(zhuǎn)換為帶符號(hào)的十六進(jìn)制整數(shù),字母大寫e將數(shù)字轉(zhuǎn)換為科學(xué)計(jì)數(shù)法格式(小寫)E將數(shù)字轉(zhuǎn)換為科學(xué)計(jì)數(shù)法格式(大寫)f、F將數(shù)字轉(zhuǎn)換為十進(jìn)制浮點(diǎn)數(shù)g浮點(diǎn)格式。如果指數(shù)小于-4或不小于精度(默認(rèn)為6)則使用小寫指數(shù)格式,否則使用十進(jìn)制格式。G浮點(diǎn)格式。如果指數(shù)小于-4或不小于精度(默認(rèn)為6)則使用大寫指數(shù)格式,否則使用十進(jìn)制格式。格式控制符的基本格式如下。%[name][flags][width[.precision]]格式控制符其中:name為圓括號(hào)括起來的字典對象的鍵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ù)字左對齊,末尾填充空格?!?”:在指定數(shù)字寬度時(shí),當(dāng)數(shù)字位數(shù)小于寬度時(shí),在數(shù)字前面填充0。和“+”“-”同時(shí)使用時(shí),“0”標(biāo)識(shí)不起作用?!啊保嚎崭瘢谡龜?shù)前面添加一個(gè)空格表示符號(hào)位。1.格式控制符“s”與“r”“s”用于將非str對象用str()函數(shù)轉(zhuǎn)換為字符串“r”用于將非str類型的對象用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)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保設(shè)施運(yùn)維合同樣本
- 專項(xiàng)信托外匯固定資產(chǎn)貸款合作合同
- 玫瑰貸記卡動(dòng)產(chǎn)質(zhì)押合同協(xié)議
- 員工合同解除合同書
- 贍養(yǎng)義務(wù)履行合同范文
- 聯(lián)合購房按揭貸款合同
- 精簡版商業(yè)租賃合同范本
- 租賃合同季度范本:機(jī)械設(shè)備篇
- 南湖區(qū):合同科技創(chuàng)新與合作新機(jī)遇
- 出租車股份合作合同條款
- 干式變壓器培訓(xùn)課件
- 2023年上海中考語文試卷(附答案)
- 理發(fā)店業(yè)務(wù)轉(zhuǎn)讓協(xié)議書范本
- 2024年江蘇省中學(xué)生生物學(xué)奧林匹克初賽理論試題
- 環(huán)境年度報(bào)告
- 生產(chǎn)流水線的規(guī)劃方案
- 小針刀療法教學(xué)課件
- 打造寫生基地方案
- 寫作:廣告詞-【中職專用】高二語文高效課堂(高教版2023·職業(yè)模塊)
- 爆發(fā)性心肌炎護(hù)理查房課件
- 銷售人員人才畫像
評論
0/150
提交評論