Python語言基礎(chǔ)與應(yīng)用 課件 第3章 Python 基本數(shù)據(jù)類型_第1頁
Python語言基礎(chǔ)與應(yīng)用 課件 第3章 Python 基本數(shù)據(jù)類型_第2頁
Python語言基礎(chǔ)與應(yīng)用 課件 第3章 Python 基本數(shù)據(jù)類型_第3頁
Python語言基礎(chǔ)與應(yīng)用 課件 第3章 Python 基本數(shù)據(jù)類型_第4頁
Python語言基礎(chǔ)與應(yīng)用 課件 第3章 Python 基本數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

3.1數(shù)字類型

3.2數(shù)字類型的運(yùn)算

3.3字符串類型

3.4字符串類型的操作

3.5精選案例

第3章Python的基本數(shù)據(jù)類型考綱考點(diǎn)

數(shù)字類型:整數(shù)類型、浮點(diǎn)數(shù)類型和復(fù)數(shù)類型

數(shù)字類型的運(yùn)算:數(shù)值運(yùn)算操作符、數(shù)值運(yùn)算函數(shù)

字符串類型及格式化:索引、切片、基本的format()格式化方法

字符串類型的操作:字符串操作符、處理函數(shù)和處理方法

類型判斷和類型間轉(zhuǎn)換知識導(dǎo)圖3.1數(shù)字類型

Python語言提供3種數(shù)字類型:整數(shù)類型、浮點(diǎn)數(shù)類型和復(fù)數(shù)類型,分別對應(yīng)數(shù)學(xué)中的整數(shù)、實(shí)數(shù)和復(fù)數(shù)。

1010是一個(gè)整數(shù)類型,10.10是一個(gè)浮點(diǎn)數(shù)類型,10+10j是一個(gè)復(fù)數(shù)類型。3.1.1整數(shù)

在python中,整數(shù)類型的數(shù)據(jù)類型名為int,一般認(rèn)為整數(shù)類型是沒有取值范圍的限制的。整數(shù)類型可以用4種進(jìn)制表示:十進(jìn)制、二進(jìn)制、八進(jìn)制、十六進(jìn)制。一般情況下默認(rèn)為十進(jìn)制,如果需要表達(dá)成其他進(jìn)制,需要在數(shù)字前面加上相應(yīng)的引導(dǎo)符在python中,不同進(jìn)制的整數(shù)之間是可以直接進(jìn)行運(yùn)算和比較的,運(yùn)算結(jié)果默認(rèn)為十進(jìn)制示例代碼如下:>>>0xf3+123366>>>0o1167+0b00111110010==0x2f2*2False

Python采用基于值的內(nèi)存管理方式,如果為不同變量賦為相同值,這個(gè)值在內(nèi)存中只保存一份,多個(gè)變量指向同一個(gè)值的內(nèi)存空間的首地址。整數(shù)的緩存

當(dāng)Python啟動(dòng)時(shí),會(huì)對[-5,256]的整數(shù)進(jìn)行緩存,因此如果多個(gè)變量的值介于該范圍內(nèi),那么這些變量共用同一個(gè)值的內(nèi)存空間。對于[-5,256]區(qū)間之外的整數(shù),則有兩種情況:1.同一個(gè)程序或交互模式下同一個(gè)語句中的同值不同名變量會(huì)共用同一個(gè)內(nèi)存空間。2.不同程序或交互模式下不同語句是不遵守這個(gè)約定的。

Python以上范圍僅適用于交互方式,如果是文件方式,則由于解釋器做了一部分的優(yōu)化,其緩存范圍變?yōu)閇-5,任意整數(shù)]3.1.2浮點(diǎn)數(shù)

Python中的浮點(diǎn)數(shù)是帶小數(shù)點(diǎn)的數(shù)字,用于表示實(shí)數(shù),可以是正數(shù)、負(fù)數(shù)或零。浮點(diǎn)數(shù)既可以用帶小數(shù)點(diǎn)的數(shù)表示,也可以用科學(xué)計(jì)數(shù)法表示。

Python語言中的浮點(diǎn)數(shù)類型必須帶有小數(shù)部分,小數(shù)部分可以是0,例如:1100是整數(shù),1100.0是浮點(diǎn)數(shù)。

Python浮點(diǎn)數(shù)類型的數(shù)值范圍和小數(shù)精度受不同計(jì)算機(jī)系統(tǒng)的限制。除高精度科學(xué)計(jì)算外的絕大部分運(yùn)算來說,浮點(diǎn)數(shù)類型的數(shù)值范圍和小數(shù)精度足夠“可靠”。>>>1234567890.987654321

*

1234567890.9876543211.5241578774577044e+18>>>9876543210.123456789

/

1234567890.9876543217.000000066600002??

Python中的浮點(diǎn)數(shù)可以是有限數(shù)、無窮大、NaN(非數(shù)字)等特殊值,示例代碼如下:>>>float("inf")#無窮大inf>>>float("-inf")#無窮小-inf>>>float("nan")#非數(shù)字nan??在Python中,由于浮點(diǎn)數(shù)的存儲方式和計(jì)算機(jī)的精度限制,有時(shí)候會(huì)出現(xiàn)浮點(diǎn)數(shù)比較不準(zhǔn)確的問題。示例代碼如下:>>>0.7+0.20.8999999999999999#結(jié)果不是0.9>>>0.7-0.20.49999999999999994#結(jié)果不是0.5>>>0.7-0.2==0.5#直接比較失敗False可提供兩種解決方案??方法1:使用abs()函數(shù),abs()函數(shù)是用于返回一個(gè)數(shù)的絕對值,示例代碼如下:>>>abs((0.7-0.2)-0.5)<10e-6True說明:

這里使用了abs()函數(shù)計(jì)算兩個(gè)浮點(diǎn)數(shù)的差的絕對值,然后與一個(gè)小的差值10e-6進(jìn)行比較。如果差的絕對值小于這個(gè)差值,就可以認(rèn)為兩個(gè)浮點(diǎn)數(shù)相等。當(dāng)然這個(gè)差值的選擇需要根據(jù)具體情況進(jìn)行調(diào)整。如果需要進(jìn)行更精確的比較,可以選擇更小的差值。??方法2:使用round()函數(shù),round()函數(shù)用于對浮點(diǎn)數(shù)進(jìn)行四舍五入。示例代碼如下:>>>round(1.2345,2)#四舍五入,保留兩位小數(shù)1.23>>>round(0.7-0.2,3)0.5>>>round(0.7-0.2,3)==0.5True說明:

這里先使用round()函數(shù)對浮點(diǎn)數(shù)進(jìn)行四舍五入,然后再進(jìn)行浮點(diǎn)數(shù)的比較。當(dāng)然關(guān)于浮點(diǎn)數(shù)比較問題的解決還有一些其他的辦法,比如使用decimal庫等等,無論使用哪種方法都需要結(jié)合實(shí)際情況考慮需要比較的精度,處理掉不確定尾數(shù)對比較的干擾。3.1.3復(fù)數(shù)

復(fù)數(shù)類型表示數(shù)學(xué)中的復(fù)數(shù)。復(fù)數(shù)有一個(gè)基本單位元素j,叫作“虛數(shù)單位”。含有虛數(shù)單位的數(shù)被稱為復(fù)數(shù)。例如:

11.3+4j

-5.6+7j

1.23e-4+5.67e+89j復(fù)數(shù)類型

Python語言中,復(fù)數(shù)可以看作是二元有序?qū)崝?shù)對(a,b),表示為:a

+

bj,其中,a是實(shí)數(shù)部分,簡稱實(shí)部,b是虛數(shù)部分,簡稱虛部。虛數(shù)部分通過后綴“J”或者“j”來表示。需要注意,當(dāng)b為1時(shí),1不能省略,即

1j表示復(fù)數(shù),而j則表示Python程序中的一個(gè)變量。復(fù)數(shù)類型

Python內(nèi)置支持復(fù)數(shù)類型及運(yùn)算,并且形式上與數(shù)學(xué)上的復(fù)數(shù)完全一致。#內(nèi)置函數(shù)abs()計(jì)算復(fù)數(shù)的模復(fù)數(shù)類型

復(fù)數(shù)類型中實(shí)部和虛部都是浮點(diǎn)類型,對于復(fù)數(shù)z,可以用z.real和z.imag分別獲得它的實(shí)數(shù)部分和虛數(shù)部分>>>(1.23e4+5.67e4j).real12300.0>>>(1.23e4+5.67e4j).imag56700.0>>>1.23e4+5.67e4j.imag

#

先獲得5.67e4j的虛部,再與1.23e4進(jìn)行求和計(jì)算69000.0補(bǔ)充:分?jǐn)?shù)

Python中的標(biāo)準(zhǔn)庫fractions中的Fraction對象支持分?jǐn)?shù)運(yùn)算#創(chuàng)建分?jǐn)?shù)對象#查看分子#查看分母#分?jǐn)?shù)運(yùn)算,自動(dòng)進(jìn)行通分#把實(shí)數(shù)轉(zhuǎn)換為分?jǐn)?shù)??

for語句,是一種循環(huán)結(jié)構(gòu),其作用是根據(jù)判斷條件確定一段程序是否需要反復(fù)執(zhí)行。示例代碼如下:>>>foriinrange(10): print(i,end=",")0,1,2,3,4,5,6,7,8,9,3.2數(shù)字類型的運(yùn)算3.2.1算術(shù)運(yùn)算操作符

Python提供了7個(gè)基本的數(shù)值運(yùn)算操作符操作符說明+x+y,x與y的和-x-y,x與y的差*x*y,x與y的積/x/y,x除以y的商//x//y,不大于x除以y的商的最大的整數(shù)%x%y,x除以y的余數(shù),常稱為模運(yùn)算**x**y,x的y次冪??

1.減除運(yùn)算與數(shù)學(xué)上的意義相同,示例代碼如下:>>>1.23-54.6e-20.6839999999999999>>>1.23/50.246>>>6/23.0說明:上例中整數(shù)6除以整數(shù)2的結(jié)果是浮點(diǎn)數(shù)3.0,即除法運(yùn)算結(jié)果的數(shù)據(jù)類型為浮點(diǎn)型數(shù)據(jù)。??

2.運(yùn)算符“+”除了用于算術(shù)加法以外,還可以用于列表、元組、字符串的連接,但不支持不同類型的對象之間相加或連接。??

3.運(yùn)算符“*”除了用于算術(shù)乘法以外,還可以用于列表、元組、字符串這幾個(gè)序列類型與整數(shù)的乘法,表示序列元素的重復(fù),生成新的序列對象。示例代碼如下:>>>1.23*54.6e-2#兩個(gè)浮點(diǎn)數(shù)相乘0.6715800000000001>>>True*3#True當(dāng)作13>>>False*3#False當(dāng)作00>>>[1,2,3]*3#列表重復(fù)[1,2,3,1,2,3,1,2,3]>>>(1,2,3)*3#元組重復(fù)(1,2,3,1,2,3,1,2,3)>>>"abc"*3#字符串重復(fù)'abcabcabc'

4.運(yùn)算符/和//在Python中分別表示算數(shù)除法和算術(shù)求整(floordivision)#數(shù)學(xué)意義上的除法#如果兩個(gè)操作數(shù)都是整數(shù),結(jié)果為整數(shù)#如果兩個(gè)操作數(shù)中有實(shí)數(shù),結(jié)果為實(shí)數(shù)形式的整數(shù)值#向下取整說明:

使用“/”除法運(yùn)算符時(shí),即使兩個(gè)操作數(shù)都是整數(shù),結(jié)果也是浮點(diǎn)數(shù)。而使用“//”運(yùn)算符時(shí),結(jié)果總是一個(gè)整數(shù)。??

5.運(yùn)算符“%”可以用于整數(shù)或?qū)崝?shù)的求余運(yùn)算,也稱為求模運(yùn)算?!?”也可用于字符串格式化,不過不推薦使用此用法做字符串格式化。示例代碼如下:>>>789%23#求余數(shù)7>>>123.45%3.2#實(shí)數(shù)也可以求余,注意精度1.849999999999996>>>'%c,%d'%(65,65)#把65分別格式化為字符和整數(shù)'A,65'>>>'%f,%s'%(65,65)#把65分別格式化為實(shí)數(shù)和字符串'65.000000,65'??

6.運(yùn)算符**表示冪乘,等價(jià)于內(nèi)置函數(shù)pow()。示例代碼如下:>>>3**2#3的2次方,等價(jià)pow(3,2)9>>>pow(3,2,8)#等價(jià)于(3**2)%81>>>9**0.5#9的0.5次方,即9的平方根3.0>>>(-9)**0.5#負(fù)數(shù)的平方根(1.8369701987210297e-16+3j)??以上我們所講述的這些操作符(+、-、*、/、//、%、**)都是二元運(yùn)算操作符,可以與賦值符號(=)相連,形成增強(qiáng)賦值操作符(+=、-=、*=、/=、//=、%=、**=),有關(guān)增強(qiáng)賦值操作在2.4.2節(jié)中已介紹了。增強(qiáng)賦值操作符可以簡化對同一變量賦值語句的表達(dá),也是python簡潔語言的一種特色,建議大家多多使用。算術(shù)運(yùn)算符總結(jié)??數(shù)值運(yùn)算可能改變計(jì)算結(jié)果的數(shù)據(jù)類型,類型的改變與運(yùn)算符有關(guān),基本規(guī)則如下:整數(shù)和浮點(diǎn)數(shù)混合運(yùn)算,輸出結(jié)果是浮點(diǎn)數(shù)。整數(shù)之間運(yùn)算,產(chǎn)生結(jié)果類型與操作符相關(guān),例如,除法運(yùn)算(/)的結(jié)果是浮點(diǎn)數(shù)。整數(shù)或浮點(diǎn)數(shù)與復(fù)數(shù)運(yùn)算,輸出結(jié)果是復(fù)數(shù)。3.2.2數(shù)值運(yùn)算函數(shù)

Python解釋器提供了一些內(nèi)置函數(shù),在這些內(nèi)置函數(shù)之中,有6個(gè)函數(shù)與數(shù)值運(yùn)算相關(guān)函數(shù)說明abs(x)求x的絕對值divmod(x,y)結(jié)果為(x//y,x%y)的一個(gè)元組pow(x,y[,z])結(jié)果為(x**y)%z;當(dāng)z參數(shù)省略時(shí),結(jié)果為x**yround(x[,n])對x四舍五入到n位;當(dāng)n參數(shù)省略時(shí),求x四舍五入的整數(shù)值max(x1,x2…xn)求x1,x2…xn的最大值,n無限制min(x1,x2…xn)求x1,x2…xn的最小值,n無限制??

abs()函數(shù)是一個(gè)內(nèi)置函數(shù),用于返回一個(gè)數(shù)的絕對值,其格式如下:

abs(number)參數(shù):number一個(gè)數(shù)字,可以是整數(shù)、浮點(diǎn)數(shù)或復(fù)數(shù)。返回值:如果參數(shù)是正數(shù)或零,則返回該參數(shù)本身。如果參數(shù)是負(fù)數(shù),則返回該參數(shù)的相反數(shù)。>>>abs(-5)5>>>abs(0)0>>>abs(3.33)3.33>>>abs(3-4j)5.0說明:

復(fù)數(shù)以實(shí)部和虛部為二維坐標(biāo)系的橫縱坐標(biāo),abs()就是求坐標(biāo)到原點(diǎn)的距離。??

divmod()是Python的內(nèi)置函數(shù),它用于返回一個(gè)元組,該元組包含兩個(gè)元素,除法的商和余數(shù)。這個(gè)函數(shù)接受兩個(gè)參數(shù),第一個(gè)參數(shù)是被除數(shù),第二個(gè)參數(shù)是除數(shù)。其格式如下:divmod(dividend,divisor)參數(shù):dividend是被除數(shù),divisor是除數(shù)。執(zhí)行后的結(jié)果將是一個(gè)包含兩個(gè)元素的元組,第一個(gè)元素是商,第二個(gè)元素是余數(shù)。示例代碼如下:>>>divmod(105,12)(8,9)>>>x,y=divmod(105,12)>>>x8>>>y9??

pow()函數(shù),隨其參數(shù)個(gè)數(shù)的不同,有不同的計(jì)算方式,格式如下:

pow(x,y,z)其中,pow(x,y)函數(shù)與x**y相同,用于計(jì)算x的y次冪;pow(x,y,z)是用于計(jì)算x的y次冪的結(jié)果對z求模,因?yàn)槟_\(yùn)算與冪運(yùn)算是同時(shí)進(jìn)行的,所以運(yùn)算速度會(huì)比直接做計(jì)算x的y次冪的結(jié)果對z求模速度快得多。示例代碼如下:>>>pow(8,9)134217728>>>pow(0xf,0b10)225>>>pow(34,1999998,10000)#求34的1999998次方的后四位6496>>>34**1999998%10000#對比上一條語句執(zhí)行速度6496??

round()函數(shù)用于對浮點(diǎn)數(shù)進(jìn)行四舍五入。這個(gè)函數(shù)接受兩個(gè)參數(shù),要四舍五入的數(shù)字以及小數(shù)點(diǎn)后要保留的位數(shù)。格式如下:round(number,ndigits)其中,number是round()函數(shù)要處理的數(shù)字。ndigits是整數(shù)值,可選項(xiàng),指在結(jié)果中包含的小數(shù)位數(shù)。示例代碼如下:>>>round(3.14159)3>>>round(3.14159,3)3.142>>>round(2.5)#x.5形式,x為2,偶數(shù),不進(jìn)位2>>>round(1.5)#x.5形式,x為1,奇數(shù),進(jìn)位2>>>round(0.500001)1說明:對于x.5的形式而言,當(dāng)x為偶數(shù)時(shí),x.5并不進(jìn)位;當(dāng)x為奇數(shù)時(shí),x.5才進(jìn)位??

max()與min()函數(shù):找出任意多個(gè)數(shù)字的最大值和最小值,并輸出結(jié)果。示例代碼如下:>>>max(34,56,2,12,100,0b1010,0xff)255>>>min([1,3,5,9])1>>>max("apple","banana","pear")'pear'其中,字符串比較大小是按照Unicode編碼值大小進(jìn)行的

求解如下題目:1.-3+4j的絕對值2.求102

,551999999的后四位3.3字符串類型3.3.1字符串的表示字符串定界符在python中,只有字符串類型的常量和變量,所以單個(gè)字符也是字符串。字符串用單引號、雙引號和三單引號、三雙引號作為定界符,且不同的定界符可以互相嵌套使用。字符串類型>>>

print('這是"單行字符串"')這是"單行字符串">>>

print("這是'單行字符串'")這是'單行字符串'>>>print("""這是'多行字符串'的第一行這是'多行字符串'的第二行""")這是'多行字符串'的第一行這是'多行字符串'的第二行>>>print('''這是"多行字符串"的第一行這是"多行字符串"的第二行''')這是"多行字符串"的第一行這是"多行字符串"的第二行??某些字符在Python中具有特殊含義,如引號、換行符等,直接使用它們可能導(dǎo)致語法錯(cuò)誤或產(chǎn)生預(yù)期之外的結(jié)果,所以Python提供了轉(zhuǎn)義字符,允許我們在字符串中正確表示和使用這些特殊字符,以確保代碼的正確性和可讀性。轉(zhuǎn)義字符

Python中的轉(zhuǎn)義字符是以反斜杠“\”開頭的特殊字符,用于表示特殊含義或特殊字符。??以下是一些常見的Python轉(zhuǎn)義字符:\n:換行符,表示新的一行開始。\t:制表符,表示一個(gè)制表位。\r:回車符,表示將輸出移到新的一行。\\:反斜杠符,表示一個(gè)反斜杠字符。\':單引號,表示一個(gè)單引號字符。\":雙引號,表示一個(gè)雙引號字符。示例代碼如下:>>>print("Never\ngiveup")Nevergiveup>>>print("我是反斜杠,我的符號表示是\\")我是反斜杠,我的符號表示是\>>>print("Never\tgiveup")Never giveup??在有些場合,比如說打開文件的操作,會(huì)使用到文件路徑,文件路徑中都是用反斜杠“\”表達(dá)路徑的層次,此時(shí)我們希望“\“表示的是自己本來的含義,而不是轉(zhuǎn)義字符的引導(dǎo)符,我們會(huì)在字符串前面加上字母r或R表示保持原始字符串,這樣其中的所有字符都表示原始含義而不會(huì)進(jìn)行任何轉(zhuǎn)義。這種使用方式除了用于文件路徑之外、URL和正則表達(dá)式等場合也常常會(huì)使用。示例代碼如下:>>>path='c:\windows\notepad.exe'>>>print(path)#\n被轉(zhuǎn)義為換行符c:\windowsotepad.exe>>>path=r'c:\windows\notepad.exe'#保持原始字符串,不允許轉(zhuǎn)義>>>print(path)c:\windows\notepad.exe3.3.2字符串的編碼Python3中的字符串默認(rèn)是Unicode編碼,Unicode是一種能夠表示世界上幾乎所有書寫語言的字符編碼標(biāo)準(zhǔn),這意味著我們可以在Python字符串中使用各種語言的字符,而無需擔(dān)心編碼問題。示例代碼如下:>>>'3-1=2'+chr(10004)'3-1=2?'>>>chr(9792)'♀'>>>'♀的Unicode值是:'+str(ord('♀'))'♀的Unicode值是:9792'>>>foriinrange(10): print(chr(9792+i),end="")♀?♂?????????字符串的運(yùn)算和Unicode編碼之間存在密切的關(guān)系。Unicode為每個(gè)字符分配一個(gè)唯一的數(shù)字編碼。這意味著,無論使用哪種語言或字符集,Unicode都可以確保每個(gè)字符有一個(gè)唯一的表示。因此,字符串的運(yùn)算,如連接、比較、搜索等,實(shí)際上是在底層使用Unicode編碼值進(jìn)行的。如3.2.2節(jié)中max()和min()函數(shù)對字符串的比較,其本質(zhì)是ucicode編碼值大小的比較。3.3.3字符串的索引在Python中,字符串是一種有序的數(shù)據(jù)類型,每個(gè)字符都有一個(gè)對應(yīng)的索引。字符串有兩種序號體系:正向遞增序號和反向遞減序號。

字符串是一個(gè)字符序列:字符串最左端位置標(biāo)記為0,依次增加。對字符串中某個(gè)字符的檢索被稱為索引。索引的使用方式如下:<字符串或字符串變量>[序號]

如果字符串長度為L,正向遞增需要以最左側(cè)字符序號為0,向右依次遞增,最右側(cè)字符序號為L-1;反向遞減序號以最右側(cè)字符序號為-1,向左依次遞減,最左側(cè)字符序號為-L。??示例代碼如下:>>>'自知者英,自勝者雄。'[-1]'。'>>>x='自知者英,自勝者雄。'>>>x[1]'知'>>>x[-9]'知'說明:

嘗試訪問超出字符串長度的索引會(huì)導(dǎo)致IndexError異常,即會(huì)出現(xiàn)出錯(cuò)提示。3.3.4字符串的切片<字符串或字符串變量>[N:M:K]在Python中,字符串切片是一種操作字符串的方法,它允許我們提取字符串的子串。其格式如下:其中,切片操作使用冒號(:)分隔三個(gè)參數(shù):起始索引N、切片結(jié)束索引M和步長K。??注意以下幾點(diǎn):切片操作是左閉右開的,即起始索引N是包括的,但結(jié)束索引M是排除的。如果沒有指定結(jié)束索引M,那么切片將到字符串的末尾。步長K默認(rèn)值為1,即每次移動(dòng)一個(gè)字符。如果是負(fù)數(shù)步長,那么切片會(huì)從后向前進(jìn)行。切片操作不會(huì)改變原始字符串,而是創(chuàng)建一個(gè)新的字符串。??示例代碼如下:>>>'國家富強(qiáng),人民幸福!'[8:4]#起始索引大于結(jié)束索引,且步長1,結(jié)果空串''>>>'國家富強(qiáng),人民幸福!'[:4]#起始索引省略,默認(rèn)為0'國家富強(qiáng)'>>>'國家富強(qiáng),人民幸福!'[5:]#結(jié)束索引省略,默認(rèn)取到最后一個(gè)字符'人民幸福!'>>>x="〇一二三四五六七八九十">>>x[1:8:2]#起始索引1到結(jié)束索引8,步長為2'一三五七'>>>x[::-1]#逆序操作'十九八七六五四三二一〇'說明:

以前的一些程序設(shè)計(jì)中編程較復(fù)雜的逆向輸出,可以用字符串的切片直接完成。3.4字符串類型的操作3.4.1字符串操作符在Python中,字符串操作符主要用于字符串的連接、重復(fù)和其他操作?;镜?個(gè)字符串操作符如下表所示:操作表達(dá)式說明a+b連接兩個(gè)字符串a(chǎn)與ba*n或n*a復(fù)制n次字符串a(chǎn)ains如果a是s的子串,返回True;否則返回False??示例代碼如下:>>>x="擁抱"+"人工智能時(shí)代">>>x'擁抱人工智能時(shí)代'>>>"人工智能"*2'人工智能人工智能'>>>'智能'inxTrue>>>'我們'inxFalse3.4.2字符串操作函數(shù)

Python語言提供了一些對字符串處理的內(nèi)置函數(shù)函數(shù)說明len(x)返回字符串x的長度,或者組合數(shù)據(jù)類型元素個(gè)數(shù)str(x)返回x所對應(yīng)的字符串形式,x是任意類型數(shù)據(jù)chr(x)返回整數(shù)x所對應(yīng)的Unicode字符ord(x)返回單字符x所對應(yīng)的Unicode編碼值int(x)返回x所對應(yīng)的整數(shù)形式,x是浮點(diǎn)數(shù)或字符串float(x)返回x所對應(yīng)的浮點(diǎn)數(shù)形式,x是整數(shù)或字符串??示例代碼如下:>>>len('科技崛起,國運(yùn)昌盛')9>>>str("china")'china'>>>str(78)'78'>>>str([1,2,3])'[1,2,3]'>>>chr(10010)'?'>>>ord("&")38說明:chr()與ord()這兩個(gè)函數(shù)是一對互為逆運(yùn)算的函數(shù),用來在字符和其對應(yīng)的Unicode編碼值之間進(jìn)行轉(zhuǎn)換;str()函數(shù)的參數(shù)是任意的數(shù)據(jù)類型,但前提是系統(tǒng)能識別的任意的數(shù)據(jù)類型;len()函數(shù)求長度時(shí),漢字、英文字母和標(biāo)點(diǎn)符號等都是做為一個(gè)長度單位處理。??有如下示例代碼:>>>int(567.567)567>>>int("567.567")Traceback(mostrecentcalllast):File"<pyshell#164>",line1,in<module>int("567.567")ValueError:invalidliteralforint()withbase10:'567.567'>>>float(567)567.0>>>float("567.567")567.567說明:int()和float()轉(zhuǎn)換字符串?dāng)?shù)據(jù)時(shí),只能轉(zhuǎn)換系統(tǒng)能正確識別的字符串?dāng)?shù)據(jù),并不是所有的字符串都可以轉(zhuǎn)換。3.4.3字符串處理方法

方法也是一個(gè)函數(shù),只是調(diào)用方式不同。函數(shù)采用func(x)方式調(diào)用,而方法則采用<a>.func(x)形式調(diào)用。方法僅作用于前導(dǎo)對象<a>。方法名說明str.upper()返回一個(gè)全部字符大寫的新字符串str.lower()返回一個(gè)全部字符小寫的新字符串str.find(sub)返回sub子串在str中的首次出現(xiàn)的索引值,如不存在,則返回-1str.strip(chars)移除字符串str頭尾中的chars字符str.split(sep)返回一個(gè)列表,列表中的元素由str根據(jù)sep切片構(gòu)成str.replace(old,new)返回一個(gè)新字符串,其中所有old子串被new替換str.count(sub)返回str中sub子串出現(xiàn)的次數(shù)str.center(width,fillchar)str字符串居中對齊,兩邊用fillchar填充str.join(seq)以str做分隔,將seq中所有元素合并為一個(gè)新字符串??

str.upper()和str.lower()是一對方法,用于實(shí)現(xiàn)字符串str中全部字符的大寫或者小寫轉(zhuǎn)換。示例代碼如下:>>>x="Believeinyourself.">>>x.upper()'BELIEVEINYOURSELF.'>>>x.lower()'believeinyourself.'>>>x'Believeinyourself.'??

str.find()方法是可以指定查找范圍的。其具體格式如下:

str.find(sub[,start[,end]])sub:必選參數(shù),代表要查找的子字符串。start和end:這兩個(gè)參數(shù)是可選的,是字符串中的正向遞增序號和反向遞減序號,用于指定查找的范圍。start代表查找的起始位置,end代表查找的結(jié)束位置。注意,這里的范圍是左閉右開的,即包括start索引位置但不包括end索引位置。如果不指定這兩個(gè)參數(shù),查找范圍默認(rèn)為整個(gè)字符串。??示例代碼如下:>>>x="Breakbarriers,buildbridges.">>>x.find("build")#返回第一次出現(xiàn)的位置16>>>x.find("d",7)#從指定位置7開始查找20>>>x.find("b",6,19)#從指定下標(biāo)范圍6至19中查找第一個(gè)符合要求的6>>>x.find("break",6,19)#指定字符串不存在,返回-1值-1說明:str.find(x)方法是區(qū)分大小寫的,這意味著它會(huì)將"Break"和"break"當(dāng)作不同的字符串處理;str.find(x)方法返回的是子字符串在主字符串中首次出現(xiàn)的位置,如果希望找到所有出現(xiàn)的位置,可能需要使用循環(huán)或其他方法。??

str.strip(chars)方法,從字符串str中去掉在其頭尾chars中列出的字符。chars是一個(gè)字符串,可以有一個(gè)或多個(gè)字符,其中出現(xiàn)的每個(gè)字符如果在頭尾部的話都會(huì)被去掉。>>>x="----中國人正走向世界舞臺的中央----">>>x.strip("")#去掉x的頭尾空格'----中國人正走向世界舞臺的中央----'>>>x.strip("-")#去掉x中的“-”,但因?yàn)?不在頭尾部,返回原始字符串'----中國人正走向世界舞臺的中央----'>>>x.strip("-")#去掉x的頭尾空格和“-”'中國人正走向世界舞臺的中央'??

str.split(sep)能夠根據(jù)sep分割字符串str,分割后的內(nèi)容以列表類型返回。可以用于對要處理的大文本做初步數(shù)據(jù)處理。示例代碼如下:>>>x="Boldactionsbreedbrightfutures.">>>x.split()#默認(rèn)以空格切割['Bold','actions','breed','bright','futures.']>>>x.split("b")#用字符b切割['Boldactions','reed','rightfutures.']>>>x.split("br")#用字符br切割['Boldactions','eed','ightfutures.']??說明:str.split()若不指定分隔符,則字符串中的任何空白符號(包括空格、換行符、制表符等)的連續(xù)出現(xiàn)都將被認(rèn)為是分隔符。示例代碼如下:>>>x="Bold\n\nactions\t\tbreedbrightfutures.">>>x.split()['Bold','actions','breed','bright','futures.']上例中“\n“是換行符,”\t”是制表符,在默認(rèn)方式下都被認(rèn)為是分隔符。??

str.replace()方法,其格式如下:

str.replace(old,new[,count])說明:(1)str:要進(jìn)行替換的原始字符串。(2)old:要替換的子字符串。(3)new:用于替換old子字符串的新子字符串。(4)count:一個(gè)可選參數(shù),指定最大替換次數(shù)。如果指定了該參數(shù),replace()方法將在達(dá)到最大替換次數(shù)后停止替換。??示例代碼如下:>>>x="Bebrave,bebold,bebeautiful.">>>x.replace("be","is")#所有的be都被替換'Bebrave,isbold,isisautiful.'>>>x.replace("be","is",1)#只替換第一個(gè)出現(xiàn)的1個(gè)be'Bebrave,isbold,bebeautiful.'>>>x.replace("be","is",2)#替換依次出現(xiàn)的2個(gè)be'Bebrave,isbold,isbeautiful.'>>>x.replace("Bold","happy")#無法替換,不會(huì)出現(xiàn)出錯(cuò)提示'Bebrave,bebold,bebeautiful.'說明:replace()方法不會(huì)更改原始字符串,而是返回一個(gè)新的字符串;replace()方法是大小寫敏感的;如果指定的old子字符串在原始字符串中不存在,replace()方法將返回原始字符串的副本,不做任何更改;count參數(shù)可以用來限制替換的次數(shù)。??

str.count()方法,其格式如下:

str.count(sub[,start[,end]])(1)str:要計(jì)算子字符串出現(xiàn)次數(shù)的原始字符串。(2)sub:要計(jì)算出現(xiàn)次數(shù)的子字符串。(3)start和end:可選參數(shù),用于指定計(jì)算的起始和結(jié)束位置。默認(rèn)情況下,start為0,end為字符串的長度。??示例代碼如下:>>>x="Knowledgeiskey,kindnessunlocksdoubledoors.">>>x.count("s")5>>>x.count("ss")1>>>x.count("sss")#不存在時(shí)返回00>>>x.count("s",12)4>>>x.count("s",12,40)3說明:count()方法是大小寫敏感的;如果指定的sub子字符串在原始字符串中不存在,count()方法將返回0;通過提供start和end參數(shù),可以限制計(jì)算的范圍。該方法還可以用于計(jì)算或統(tǒng)計(jì)特定元素在列表、集合中出現(xiàn)的次數(shù)。??

str.center()方法,其格式如下所示:

str.center(width[,fillchar])(1)str:要居中的原始字符串。(2)width:指定新字符串的總寬度。如果原始字符串的長度小于width,則會(huì)在兩側(cè)填充字符以達(dá)到該寬度;當(dāng)width小于字符串長度時(shí),返回原始字符串。(3)fillchar:一個(gè)可選參數(shù),用于指定填充字符,只能是單個(gè)字符,默認(rèn)值為空格。??示例代碼如下:>>>"智慧中國".center(15)#總長度15,“智慧中國”居中,其余用空格填充'智慧中國'>>>"智慧中國".center(15,"*")#總長度15,“智慧中國”居中,其余用“*“填充'******智慧中國*****'>>>"智慧中國".center(2,"*")#總長度2,小于“智慧中國”字符串長度4'智慧中國'>>>"智慧中國".center(15,"*-")#fillchar是兩個(gè)字符,出錯(cuò)Traceback(mostrecentcalllast):File"<pyshell#197>",line1,in<module>"智慧中國".center(15,"*-")TypeError:Thefillcharactermustbeexactlyonecharacterlong??

str.join()方法,其格式如下所示:

str.join(seq)(1)str:用作分隔符的字符串。(2)seq:一個(gè)序列對象(如字符串、列表、元組等),其元素將被連接成一個(gè)字符串。??示例代碼如下:>>>"".join("change")#給change中增加空格做為分隔'change'>>>",".join("change")#給change中增加逗號做為分隔'c,h,a,n,g,e'>>>"*".join([1,2,3,4])#列表中元素為int,無法連接字符串“*”Traceback(mostrecentcalllast):File"<pyshell#30>",line1,in<module>"*".join([1,2,3,4])TypeError:sequenceitem0:expectedstrinstance,intfound>>>"*".join(["1","2","3","4"])#列表中元素為str,連接成功'1*2*3*4'說明:join()方法是一個(gè)字符串方法,因此調(diào)用它的對象通常是一個(gè)字符串,該字符串用作分隔符;seq中的元素必須都是字符串,如果seq中包含非字符串元素,必須在調(diào)用join()方法之前將其轉(zhuǎn)換為字符串;join()方法不會(huì)更改原始字符串,而是返回一個(gè)新的字符串。??使用split()和join()方法可以刪除字符串中多余的空白字符,如果有連續(xù)多個(gè)空白字符,只保留一個(gè)。示例代碼如下:>>>x="DreamActionSuccess">>>"".join(x.split())#刪除所有空格'DreamActionSuccess'>>>"".join(x.split())#整理成一個(gè)空格連接單詞'DreamActionSuccess'說明:split()方法和join()方法可以結(jié)合使用,以實(shí)現(xiàn)字符串的拆分和重新組合。這種結(jié)合使用在處理字符串時(shí)非常常見,特別是在需要對字符串進(jìn)行分割、修改或重新格式化的情況下。??例3-1首都單詞處理問題描述:給定一個(gè)包含多個(gè)國家首都單詞的字符串,對這些首都單詞進(jìn)行處理,并生成一個(gè)新的字符串。例如輸入:"beijing,london,paris,tokyo,berlin",輸出:"BeijingLondonParisTokyoBerlin"程序分析:(1)將輸入字符串拆分成首都單詞的列表。(2)對每個(gè)首都單詞的首字母進(jìn)行大寫處理。(3)將處理后的首都單詞列表重新組合為一個(gè)新的字符串,其中每個(gè)單詞之間用空格分隔。(4)輸出處理后的新字符串。??程序代碼如下:#使用國家的首都單詞作為示例輸入input_string="beijing,london,paris,tokyo,berlin"

#使用split()方法拆分字符串為單詞列表words=input_string.split(",")

#使用for循環(huán)對每個(gè)單詞的首字母進(jìn)行大寫處理processed_words=[]#創(chuàng)建一個(gè)空列表forwordinwords:processed_word=word.capitalize()#使用capitalize()方法把單詞首字母轉(zhuǎn)大寫

processed_words.append(processed_word)#使用append()給列表添加元素

#使用join()方法將處理后的單詞列表重新組合為一個(gè)新的字符串output_string="".join(processed_words)

#打印結(jié)果print(output_string)3.4.4format()方法

字符串格式化format()方法的基本使用格式是:

<模板字符串>.format(<參數(shù)>)其中,模板字符串是一個(gè)由字符串和槽組成的字符串,用來控制字符串和變量的顯示效果。槽用大括號({})表示,對應(yīng)format()方法中逗號分隔的參數(shù)。示例代碼如下:format()方法的基本使用>>>"{}一道同云雨,明月何曾是兩鄉(xiāng)".format("青山")'青山一道同云雨,明月何曾是兩鄉(xiāng)'

如果模板字符串有多個(gè)槽,且槽內(nèi)沒有指定序號,則按照槽出現(xiàn)的順序分別對應(yīng).format()方法中的不同參數(shù)。>>>"{}一道同云雨,{}何曾是兩鄉(xiāng)".format("青山","明月")'青山一道同云雨,明月何曾是兩鄉(xiāng)'

可以通過format()參數(shù)的序號在模板字符串槽中指定參數(shù)的使用,參數(shù)從0開始編號>>>"{1}一道同云雨,{0}何曾是兩鄉(xiāng)".format("青山","明月")'明月一道同云雨,青山何曾是兩鄉(xiāng)??如果模板字符串中出現(xiàn)的槽的數(shù)量和format()函數(shù)中出現(xiàn)的參數(shù)數(shù)量上不一致,則必須在槽中使用序號指定參數(shù)使用,否則會(huì)產(chǎn)生IndexError錯(cuò)誤。示例代碼如下:>>>"{}一道同云雨,{}何曾是兩鄉(xiāng)".format("青山")Traceback(mostrecentcalllast):File"<pyshell#131>",line1,in<module>"{}一道同云雨,{}何曾是兩鄉(xiāng)".format("青山")IndexError:tupleindexoutofrange其解決問題代碼如下:>>>"{0}一道同云雨,{0}何曾是兩鄉(xiāng)".format("青山")'青山一道同云雨,青山何曾是兩鄉(xiāng)'??如果希望在模板字符串中直接輸出大括號,則必須在模塊字符串中用“{{”表示“{”,用“}}”表示“}”。示例代碼如下:>>>"他吟誦道:{{{0}一道同云雨,{1}何曾是兩鄉(xiāng)}}".format("青山","明月")'他吟誦道:{青山一道同云雨,明月何曾是兩鄉(xiāng)}'說明:format()方法通常與print()函數(shù)一起構(gòu)成輸出語句。

format()方法中模板字符串的槽除了包括參數(shù)序號,還可以包括格式控制信息。{<參數(shù)序號>:<格式控制標(biāo)記>}format()方法的格式控制參數(shù)序號編號從0開始,對應(yīng)format()中參數(shù)的個(gè)數(shù),自動(dòng)順序編號。格式控制標(biāo)記以引號(:)作為開始,其后包括<填充><對齊><寬度><,><.精度><類型>6個(gè)字段,其格式內(nèi)容如后表所示,這些字段都是可選的,也可以組合使用。??<填充><對齊><寬度><,><.精度><類型>單個(gè)填充字符<左對齊>右對齊^居中對齊輸出寬度數(shù)字千位分隔符浮點(diǎn)小數(shù)位數(shù)或字符串最大輸出長度整數(shù)類型b,c,d,o,x,X浮點(diǎn)數(shù)類型e,E,f,%說明:<寬度>:指當(dāng)前槽的設(shè)定的輸出字符寬度,如果該槽對應(yīng)參數(shù)的實(shí)際值比寬度設(shè)定值大,則使用對應(yīng)參數(shù)的實(shí)際長度。如果該參數(shù)值的實(shí)際位數(shù)小于指定寬度,則按照對齊指定方式在設(shè)定寬度內(nèi)對齊,不足部分默認(rèn)以空格字符補(bǔ)充。<填充>:指<寬度>內(nèi)除了對應(yīng)參數(shù)外的補(bǔ)充字符采用什么方式表示,默認(rèn)采用空格,填充字符只能使用單個(gè)字符。<對齊>:指對應(yīng)參數(shù)在<寬度>內(nèi)輸出時(shí)的對齊方式,分別使用<、>、^三個(gè)符號表示左對齊、右對齊和居中對齊。??示例代碼如下:>>>x="國泰民安">>>"{:15}".format(x)#默認(rèn)方式左對齊'國泰民安'>>>"{:1}".format(x)#指定寬度為1,變量x寬度為4'國泰民安'>>>"{:^15}".format(x)#居中對齊'國泰民安'>>>"{:#^15}".format(x)#居中對齊,其余部分用#填充

'#####國泰民安######'??格式控制標(biāo)記也可以使用變量來表示,即可以用槽來指定所對應(yīng)的控制標(biāo)記及數(shù)量。示例代碼如下:>>>x="國泰民安">>>y="井">>>z="^">>>"{0:{1}^15}".format(x,y)'井井井井井國泰民安井井井井井井'>>>"{0:{1}^{2}}".format(x,y,15)'井井井井井國泰民安井井井井井井'>>>"{0:{1}{3}{2}}".format(x,y,15,z)'井井井井井國泰民安井井井井井井'??

<,>:逗號,用于顯示數(shù)字的千位分隔符,適用于整數(shù)和浮點(diǎn)數(shù)。<.精度>:表示兩個(gè)含義,以小數(shù)點(diǎn)(.)開頭。對于浮點(diǎn)數(shù),精度表示小數(shù)部分輸出的有效位數(shù);對于字符串,精度表示輸出的最大長度。<類型>:表示輸出整數(shù)和浮點(diǎn)數(shù)類型的格式規(guī)則。對于整數(shù)類型,輸出格式包括6種;對于浮點(diǎn)數(shù)類型,輸出格式包括4種,浮點(diǎn)數(shù)輸出時(shí)盡量使用<.精度>表示小數(shù)部分的寬度,有助于更好地控制輸出格式。整數(shù)和浮點(diǎn)數(shù)類型的格式規(guī)則如下表所示:符號功能b輸出整數(shù)的二進(jìn)制方式c輸出整數(shù)對應(yīng)的Unicode字符d輸出整數(shù)的十進(jìn)制方式o輸出整數(shù)的八進(jìn)制方式x輸出整數(shù)的小寫十六進(jìn)制方式X輸出整數(shù)的大寫十六進(jìn)制方式e輸出浮點(diǎn)數(shù)對應(yīng)的小寫字母e的指數(shù)形式E輸出浮點(diǎn)數(shù)對應(yīng)的大寫字母E的指數(shù)形式f輸出浮點(diǎn)數(shù)的標(biāo)準(zhǔn)浮點(diǎn)形式%輸出浮點(diǎn)數(shù)的百分形式??示例代碼如下:>>>"{0:b},{0:c},{0:d},{0:x},{0:X}".format(400)'110010000,?,400,190,190'>>>"{0:e},{0:E},{0:f},{0:%}".format(1.2345)'1.234500e+00,1.234500E+00,1.234500,123.450000%'>>>"{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(1.2345)'1.23e+00,1.23E+00,1.23,123.45%'>>>"{:.2f}".format(1.23456)'1.23'>>>"{:x}".format(123)#輸出123的16進(jìn)制形式'7b'>>>"{:.5}".format("創(chuàng)新是引領(lǐng)發(fā)展的第一動(dòng)力")#輸出字符串的前5位'創(chuàng)新是引領(lǐng)'3.5案例精選??例3-2任意輸入一個(gè)三位的整數(shù),求出其各位數(shù)字,并反向順序輸出。例如:輸入123,輸出321方法1:

首先通過eval(input())函數(shù)從用戶處獲取一個(gè)整數(shù)輸入,并將其賦值給變量x。使用eval函數(shù)可以解析并執(zhí)行字符串中的Python表達(dá)式,但這里其實(shí)沒有必要使用eval,因?yàn)橹皇切枰@取輸入,所以可以直接使用int(input())。然后通過整除和取余操作來分離出這個(gè)三位數(shù)的百位、十位和個(gè)位數(shù)字,分別賦值給變量a、b和c。最后通過算術(shù)運(yùn)算將這三個(gè)數(shù)字反向順序組合,并通過print函數(shù)輸出結(jié)果。??方法1,用數(shù)學(xué)方式求解,代碼如下:x=eval(input("請輸入一個(gè)三位數(shù):"))a=x//100b=x//10%10c=x%10print(c*100+b*10+a)??方法2通過input()函數(shù)從用戶處獲取一個(gè)字符串輸入,并將其賦值給變量x。然后通過字符串索引和

溫馨提示

  • 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)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論