Python程序設(shè)計基礎(chǔ) 課件 第3、4章 程序控制、數(shù)據(jù)表示_第1頁
Python程序設(shè)計基礎(chǔ) 課件 第3、4章 程序控制、數(shù)據(jù)表示_第2頁
Python程序設(shè)計基礎(chǔ) 課件 第3、4章 程序控制、數(shù)據(jù)表示_第3頁
Python程序設(shè)計基礎(chǔ) 課件 第3、4章 程序控制、數(shù)據(jù)表示_第4頁
Python程序設(shè)計基礎(chǔ) 課件 第3、4章 程序控制、數(shù)據(jù)表示_第5頁
已閱讀5頁,還剩155頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章程序控制Contents順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)本章小結(jié)習(xí)題排序?qū)嵗?1順序結(jié)構(gòu)高級語言程序只有順序、分支和循環(huán)三種程序結(jié)構(gòu),這些結(jié)構(gòu)可以實現(xiàn)所有的計算機(jī)算法。作為一種高級語言,Python的程序控制具有極致精簡的特點(diǎn),每行代碼為一條執(zhí)行語句,處于同一縮進(jìn)位置的所有語句按位置構(gòu)成順序結(jié)構(gòu);由if語句或match語句及其下一級縮進(jìn)的語句構(gòu)成分支結(jié)構(gòu);由while語句或for語言及其下一級縮進(jìn)的語句構(gòu)成循環(huán)結(jié)構(gòu)。本節(jié)將詳細(xì)介紹Python語言程序的控制結(jié)構(gòu)。3.1順序結(jié)構(gòu)順序結(jié)構(gòu)的程序的執(zhí)行按照其語句的位置先后順序執(zhí)行。順序結(jié)構(gòu)是計算機(jī)程序的總體執(zhí)行結(jié)構(gòu),只有在程序的部分功能模塊中才可以采取分支結(jié)構(gòu)或循環(huán)結(jié)構(gòu)。3.1順序結(jié)構(gòu)1importmath2x1=input('PleaseinputxofPointA:')3y1=input('PleaseinputyofPointA:')4x2=input('PleaseinputxofPointB:')5y2=input('PleaseinputyofPointB:')6x1=float(x1)7y1=float(y1)3.1順序結(jié)構(gòu)8x2=float(x2)9y2=float(y2)10d=math.sqrt((x2-x1)**2+(y2-y1)**2)11print(f'DistanceofA({x1},{y1})andB({x2},{y2})is:gu6aieg.')第1行裝載math模塊,第10行使用了math模塊中的sqrt函數(shù)。第2行調(diào)用input函數(shù)讀取鍵盤的輸入字符串,作為點(diǎn)A的x坐標(biāo),第6行“x1=float(x1)”將x1轉(zhuǎn)化為浮點(diǎn)數(shù),仍使用標(biāo)簽x1。3.1順序結(jié)構(gòu)第3行讀取鍵盤的輸入字符串,作為點(diǎn)A的y坐標(biāo)。第7行將y1轉(zhuǎn)化為浮點(diǎn)數(shù),仍使用標(biāo)簽y1。第4行讀取鍵盤的輸入字符串,作為點(diǎn)B的x坐標(biāo)第8行將x2轉(zhuǎn)化為浮點(diǎn)數(shù),仍使用標(biāo)簽x2。第5行讀取鍵盤的輸入字符串,作為點(diǎn)B的y坐標(biāo)。第9行將y2轉(zhuǎn)化為浮點(diǎn)數(shù),仍使用標(biāo)簽y2。3.1順序結(jié)構(gòu)第10行調(diào)用math模塊的sqrt函數(shù)計算兩點(diǎn)間的距離。第11行輸出兩個點(diǎn)A和B以及它們的歐氏距離d。模塊zym0301執(zhí)行結(jié)果02分支結(jié)構(gòu)3.2分支結(jié)構(gòu)程序的分支結(jié)構(gòu)用于實現(xiàn)有條件的選擇特定語句執(zhí)行。Python語言中使用縮進(jìn)表示同一分支結(jié)構(gòu)中的語句。例如:if條件表達(dá)式:

語句1

語句2else:

語句3

語句43.2分支結(jié)構(gòu)Python語言中,縮進(jìn)也用于表示循環(huán)結(jié)構(gòu)中的歸屬關(guān)系。對縮進(jìn)格式而言,一條語句(一般為控制語句)下的具有相同縮進(jìn)量的所有語句均屬于該語句的控制部分。只是為了程序代碼美觀,每級縮進(jìn)均使用相同的縮進(jìn)量。分支結(jié)構(gòu)也稱選擇結(jié)構(gòu),Python語言中,使用if或match關(guān)鍵字實現(xiàn)分支控制。3.2.1if語句if語句具有四種常用結(jié)構(gòu),如下所示:(1)單個if結(jié)構(gòu)if條件表達(dá)式:

語句1

……

語句n上述結(jié)構(gòu)為單個if結(jié)構(gòu),即當(dāng)“條件表達(dá)式”為真時,執(zhí)行“語句1”至“語句n”。3.2.1if語句(2)標(biāo)準(zhǔn)if-else結(jié)構(gòu)if條件表達(dá)式:

語句1

……

語句melse:

語句m+1

……

語句n3.2.1if語句第二種結(jié)構(gòu)為標(biāo)準(zhǔn)的if-else結(jié)構(gòu),即當(dāng)“條件表達(dá)式”為真時,執(zhí)行“語句1”至“語句m”;否則,執(zhí)行“語句m+1”至“語句n”。如果if部分沒有語句,用“pass”語句表示。3.2.1if語句(3)if-elif-else結(jié)構(gòu)if條件表達(dá)式1:

語句1

……

語句kelif條件表達(dá)式2:

語句k+1

……

語句m3.2.1if語句elif條件表達(dá)式3:

語句m+1

……

語句p……#其他的elif語句else:

語句t

……

語句n3.2.1if語句第三種結(jié)構(gòu)是典型的多分支結(jié)構(gòu),即如果“條件表達(dá)式1”為真時,執(zhí)行“語句1”至“語句k”;否則,如果“條件表達(dá)式2”為真時,執(zhí)行“語句k+1”至“語句m”;否則,如果“條件表達(dá)式3”為真時,執(zhí)行“語句m+1”至“語句p”;否則,當(dāng)上述所有“條件表達(dá)式”均為假時,執(zhí)行“else”部分的“語句t”至“語句n”。3.2.1if語句(4)if語句的嵌套結(jié)構(gòu)if結(jié)構(gòu)中的if部分、else部分和elif部分中均可再嵌入if結(jié)構(gòu),此時,注意各個部分的縮進(jìn)關(guān)系,以保證if部分與其相應(yīng)的elif或else部分相一致,不至于出現(xiàn)“張冠李戴”的問題。3.2.1if語句例:輸入一數(shù)值x,計算分段函數(shù)f(x)的值:3.2.1if語句1x=input('Pleaseinputanumber:')2x=float(x)3y=04ifx>1:5y=x+16elif0<x<=1:7y=3*x-13.2.1if語句8elif-1<x<=0:9y=-x**2-110else:11y=2*x**312print(f'{x}produces{y:.2f}')3.2.1if語句第1~12行為一個功能模塊,求解上述的“問題”。第1行“x=input(‘Pleaseinputanumber:’)”從鍵盤輸入一個表達(dá)數(shù)值的字符串給x。第2行“x=float(x)”將x轉(zhuǎn)化為浮點(diǎn)數(shù),仍用x作為標(biāo)簽。第3行“y=0”將0賦給y。第4~11行為一個多分支結(jié)構(gòu),對應(yīng)于式(1)的四種情況,注意在Python語言中,支持這種“0<x<=1”級聯(lián)的關(guān)系不等式。第4行“ifx>1:”如果x大于1,則執(zhí)行第43行“y=x+1”將x與1的和賦給y;3.2.1if語句如果第6行“elif0<x<=1:”中x大于0且小于等于1,則執(zhí)行第7行“y=3*x-1”,將3x-1的值賦給y;否則,若第8行“elif-1<x<=0:”中x大于-1且小于等于0,則執(zhí)行第9行“y=-x**2-1”將-x2-1賦給y;在上述情況都不成立時,執(zhí)行第11行“y=2*x**3”將2x3賦給y。第12行“print(f'{x}produces{y:.2f}')”在屏幕上打印x和y的值。3.2.1if語句if結(jié)構(gòu)可以寫成一條語句,形如:y=表達(dá)式1if條件else表達(dá)式2表示當(dāng)“條件”為真時,將“表達(dá)多1”的值賦給y,否則將“表達(dá)式2”的值賦給y?!氨磉_(dá)式2”還可以嵌入新的if結(jié)構(gòu)。3.2.2match語句match多分支控制語句是Python3.10新添加的控制語句,其基本語法形式為:match表達(dá)式:case表達(dá)式1:

語句1

……

語句k3.2.2match語句case表達(dá)式2:

語句k+1

……

語句p

……#其他的case情況case_:

語句m

……

語句n3.2.2match語句上述match分支的功能非常強(qiáng)大,表現(xiàn)在這里的“表達(dá)式”可以為字符串、數(shù)值、邏輯值、列表、元組和字典等,每個case部分可以添加條件限制,用“if表達(dá)式”表示。當(dāng)match后面的“表達(dá)式”與某個case后面的表達(dá)式匹配后,則執(zhí)行該case部分的語句。3.2.2match語句例:當(dāng)輸入x為0或1或2時,輸出“低分”;當(dāng)輸入3或4,輸出“中分”;當(dāng)輸入5時,輸出“高分”;當(dāng)輸入小于0或大于5的數(shù)時,提示輸入有誤1if__name__=='__main__':2x=int(input('Inputanumber:'))3matchx:4case0|1|2:5print('Lowmark.')6case3|4:7print('Mediummark.')3.2.2match語句8case5:9print('Highmark.')10case_ifx>5:11print('Inputistoobig.')12case_ifx<0:13print('Inputistoosmall.')3.2.2match語句第2行“x=int(input('Inputanumber:'))”從鍵盤讀取一個整數(shù),賦給x。第3~13行為match結(jié)構(gòu),第3行“matchx:”為match結(jié)構(gòu)的頭部,x為match結(jié)構(gòu)的表達(dá)式;第4行“case0|1|2:”表示當(dāng)x的值為0或1或2時,執(zhí)行第5行語句“print('Lowmark.')”,即輸出“Lowmark.”。這里的“|”表示“或”。第6行“case3|4:”表示x的值為3或4時,執(zhí)行第7行“print('Mediummark.')”,輸出“Mediummark.”。3.2.2match語句第8行“case5:”表示x的值為5時,將執(zhí)行第9行輸出“Highmark.”。第10行“case_ifx>5:”表示當(dāng)x的值不滿足前面的各種case情況時,且滿足限定條件x大于5時,將執(zhí)行第11行“print('Inputistoobig.')”,輸出“Inputistoobig.”。第12行“case_ifx<0:”表示當(dāng)x的值不滿足前面的各種case情況且滿足限定條件x小于0時,將執(zhí)行第13行“print('Inputistoosmall.')”,輸出“Inputistoosmall.”。3.2.2match語句Match語句例子執(zhí)行結(jié)果:模塊zym0304執(zhí)行結(jié)果03循環(huán)結(jié)構(gòu)3.3循環(huán)結(jié)構(gòu)Python語言中,只有兩個循環(huán)控制方式,即while結(jié)構(gòu)和for結(jié)構(gòu)。while結(jié)構(gòu)有時稱為“當(dāng)型”循環(huán),即當(dāng)while后的表達(dá)式為真時,執(zhí)行while結(jié)構(gòu)中的語句;如果while后的表達(dá)式為假,則跳過while結(jié)構(gòu)執(zhí)行其后的語句。3.3.1while結(jié)構(gòu)Python語言中,只有兩個循環(huán)控制方式,即while結(jié)構(gòu)和for結(jié)構(gòu)。while結(jié)構(gòu)有時稱為“當(dāng)型”循環(huán),即當(dāng)while后的表達(dá)式為真時,執(zhí)行while結(jié)構(gòu)中的語句;如果while后的表達(dá)式為假,則跳過while結(jié)構(gòu)執(zhí)行其后的語句。while結(jié)構(gòu)有兩種基本形式,即標(biāo)準(zhǔn)的while循環(huán)結(jié)構(gòu)和while-else結(jié)構(gòu)3.3.1while結(jié)構(gòu)(1)while循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)的語法為:while條件表達(dá)式:

語句1

……

語句n在while循環(huán)結(jié)構(gòu)中,每次循環(huán)均需判斷“條件表達(dá)式”的值,如果為真,則執(zhí)行“語句1”至“語句n”。如果“條件表達(dá)式”的值為假,則跳出循環(huán)。3.3.1while結(jié)構(gòu)1if__name__=='__main__':2sum=03i=04whilei<=100:5sum+=i6i+=17print(f'1+2+...+100={sum}')3.3.1while結(jié)構(gòu)第2行“sum=0”將0賦給sum。第3行“i=0”將0賦給i。第4~6行為while循環(huán)結(jié)構(gòu),當(dāng)?shù)?行“whilei<=100:”的條件表達(dá)式“i<=100”為真時,循環(huán)執(zhí)行第5、6行。第5行“sum+=i”將i累加到sum中;第6行“i+=1”表示循環(huán)變量i累加1。3.3.1while結(jié)構(gòu)(2)while-else結(jié)構(gòu)while-else結(jié)構(gòu)的語法為:while條件表達(dá)式:

語句1

……

語句melse:

語句m+1

……

語句n3.3.1while結(jié)構(gòu)上述結(jié)構(gòu)表示如果while后面的“條件表達(dá)式”為真,則循環(huán)執(zhí)行“語句1”至“語句m”;如果“條件表達(dá)式”為假,則執(zhí)行“else:”后的“語句m+1”至“語句n”。表面上看,“else:”部分是多余的,好像總被執(zhí)行到。通常的while結(jié)構(gòu),當(dāng)其后的“條件表達(dá)式”為假時,將跳出while結(jié)構(gòu),執(zhí)行其后的語句,所以有沒有“else:”,“語句m+1”至“語句n”總被執(zhí)行到。但是有一個例外,這個例外和break語句有關(guān)。3.3.1while結(jié)構(gòu)break語句可以用于while結(jié)構(gòu)(和for結(jié)構(gòu))中,用于跳出while結(jié)構(gòu)(和for結(jié)構(gòu))。對于while-else結(jié)構(gòu)而言,break語句將跳出整個while-else結(jié)構(gòu),因此,如果在while部分執(zhí)行時遇到了break語句,將跳出整個while-else結(jié)構(gòu),即else部分的語句將不被執(zhí)行。3.3.1while結(jié)構(gòu)1if__name__=='__main__':2sum=03i=04whilei<=100:5sum+=i6i+=17ifi==51:8break3.3.1while結(jié)構(gòu)9else: 10print('Notexecuted.')11print(f'1+2+...+{i-1}={sum}')本程序段在前一段程序段的基礎(chǔ)上,添加了第7~10行。第7行“ifi==51:”如果i等于51,則執(zhí)行第8行“break”跳出while-else結(jié)構(gòu),去執(zhí)行第11行“print(f'1+2+...+{i-1}={sum}')”,輸出結(jié)果“1+2+...+50=1275”。第9~10行沒有被執(zhí)行。3.3.2for結(jié)構(gòu)while結(jié)構(gòu)幾乎可以處理所有的循環(huán)操作,有沒有必須再編寫一種循環(huán)結(jié)構(gòu)?Python語言中除了while結(jié)構(gòu)外,還有一種循環(huán)結(jié)構(gòu),稱為for結(jié)構(gòu)。存在某些情況下,for結(jié)構(gòu)比while結(jié)構(gòu)更具優(yōu)勢。3.3.2for結(jié)構(gòu)for結(jié)構(gòu)的語法有兩種:(1)基本for結(jié)構(gòu)for元素in可選代對象:

語句1

……

語句n上述for結(jié)構(gòu)表示:在“元素”遍歷“可迭代對象”中的全部元素的過程中,對于每一個“元素”,執(zhí)行“語句1”至“語句n”。3.3.2for結(jié)構(gòu)(2)for-else結(jié)構(gòu)for元素in可選代對象:

語句1

……

語句melse:

語句m+1

……

語句n3.3.2for結(jié)構(gòu)上述for-else結(jié)構(gòu)表示:在“元素”遍歷“可迭代對象”中的全部元素的過程中,對于每一個“元素”,執(zhí)行“語句1”至“語句m”。當(dāng)“可迭代對象”中的全部元素遍歷完成后,執(zhí)行“else:”部分的“語句m+1”至“語句n”。表面上,有無“else:”,“語句m+1”至“語句n”都將在for部分的循環(huán)語句執(zhí)行完后被執(zhí)行到。但是,有一個例外,即當(dāng)for部分中含有break語句時,如果執(zhí)行到break語句,將跳出整個for-else結(jié)構(gòu),執(zhí)行else部分后面的語句。這種情況和while-else結(jié)構(gòu)中遇到break語句的情況類似。3.3.2for結(jié)構(gòu)使用while結(jié)構(gòu)實現(xiàn)求列表中全部元素的和:1if__name__=='__main__':2a=[1,3,5,7,9]3s1=04foreina:5s1+=e6print(f'Sumoflist"a"is:{s1}.')7s2=08i=03.3.2for結(jié)構(gòu)9whilei<len(a):10s2+=a[i]11i+=112print(f'Sumoflist"a"is:{s2}.')模塊zym0311執(zhí)行結(jié)果04排序?qū)嵗?.4排序?qū)嵗龜?shù)據(jù)序列的排序是循環(huán)控制的典型用法實例,這里列舉兩種常用的排序方法:冒泡排序法和選擇排序法。這里主要介紹冒泡排序法。對于一個列表a,設(shè)其具有n個元素(a[0]至a[n-1]),使用冒泡排序法將其中元素從小至大排序的基本原理為:(1)把最大的數(shù)排至末尾。從列表a的第0個元素開始,從左向右依次比較相鄰的兩個元素,將小的元素放在前面,大的元素放在后面。3.4排序?qū)嵗?)只考慮列表中未排序的元素,將這些元素中最大的數(shù)排至這些元素的末尾。重復(fù)這一過程,直到列表中末排序的元素只剩下a[0]。冒泡排序法實例:1importrandom2if__name__=='__main__':3random.seed(299792458)4a=list(range(1,10+1))3.4排序?qū)嵗?random.shuffle(a)6print(f'Theshuffledsequence:{a}')7i=len(a)8whilei>1:9j=010whilej<i-1:11ifa[j]>a[j+1]:3.4排序?qū)嵗?2t=a[j]13a[j]=a[j+1]14a[j+1]=t15j+=116i-=117print(f'Thesortedsequence:{a}')3.4排序?qū)嵗Kzym0313的流程圖模塊zym0313執(zhí)行結(jié)果05本章小結(jié)本章小結(jié)本章介紹了Python語言程序的結(jié)構(gòu)與控制方式,詳細(xì)介紹了分支控制結(jié)構(gòu)和選擇控制結(jié)構(gòu)。對于分支結(jié)構(gòu),有兩種實現(xiàn)方法,即if-else結(jié)構(gòu)和match-case結(jié)構(gòu);對于循環(huán)結(jié)構(gòu),有兩種實現(xiàn)方法,即while結(jié)構(gòu)和for結(jié)構(gòu)。一定意義上,基于列表數(shù)據(jù)結(jié)構(gòu)和本章介紹的程序控制方法,理論上可以編寫出實現(xiàn)任意算法的Python程序。06習(xí)題

習(xí)題1.從鍵盤輸入兩個數(shù),求這兩個數(shù)的和、差、積、商(考慮除數(shù)為0的特殊情況)。2.給定一個一元二次方程序ax2+bx+c=0的系數(shù)a、b和c,求該方程的根(a0)。3.生成長度為300的列表a,其每個元素均為1至10間的偽隨機(jī)數(shù)(由randint(1,10)生成),求列表a中1至10各個元素的個數(shù)。4.設(shè)列表a為[8,12,5,20,23,21,14,2,11,17],使用冒泡法將a按降序排列。5.設(shè)列表a為[8,12,5,20,23,21,14,2,11,17],使用選擇法將a按降序排列。

習(xí)題6.設(shè)列表a為[8,12,5,20,23,21,14,2,11,17],使用選擇法將a按降序排列,并同時給出排序后的元素的原索引號列表。7.輸入一個正整數(shù),判斷其是否為素數(shù)。8.計算100至999間的全部素數(shù)。9.如果一個素數(shù)的逆序仍是素數(shù),稱這兩個素數(shù)為互逆序的素數(shù)對,例如,1031和1301為互逆序的素數(shù)對,編程求得1000至9999間的所有互逆序的素數(shù)對。10.用for循環(huán)替換while循環(huán),實現(xiàn)程序段3-14的選擇法排序。

第四章數(shù)據(jù)表示Contents元組集合字典本章小結(jié)習(xí)題典型實例第2章介紹了基本數(shù)據(jù)類型(整型、浮點(diǎn)型、復(fù)數(shù)型、字符串等)和列表類型等。盡管基本數(shù)據(jù)類型與列表相組合可以表示任意數(shù)據(jù)類型,但是Python還是將一些特殊形式的數(shù)據(jù)類型及其相關(guān)的方法封裝成一些新的類,以方便這些數(shù)據(jù)類型的操作。這些數(shù)據(jù)類型包括元組、集合和字典等類型,本章將詳細(xì)介紹這些新的數(shù)據(jù)表示類型。01元組4.1元組在平面中,表示點(diǎn)的位置(或稱矢量)的坐標(biāo)(x,y),是一對有序數(shù)對,即(x,y)和(y,x)代表不同的點(diǎn)。同樣,在n維空間中,點(diǎn)的坐標(biāo)(x1,x2,…,xn)也是一組有序數(shù)列,各個坐標(biāo)值的位置是固定的。元組對應(yīng)著數(shù)學(xué)上的一組有序數(shù)列,例如,包含2個元素x和y的元組表示為(x,y),這里x和y為元組的元素,且不可改變??梢园言M理解為一個常量數(shù)列。4.1.1元組定義元組為由一列有順序的數(shù)據(jù)組成的數(shù)據(jù)類型,元組是只讀的。元組間的元素間用“,”號分隔,用圓括號作為元組與其他數(shù)據(jù)的分界符。空元組和只有一個元素的元組,沒有意義,如果非要表示只含一個元素的元組,使用類似于形式“(3,)”表示,即“,”號不能少。4.1.1元組定義1if__name__=='__main__':2p1=(3,5)3print(f'p1={p1}')4p2=(5,7,9)5print(f'p2={p2}')6print("p2'stypeis:",type(p2))7p3=tuple((3,1,2))8print(f'p3={p3}')4.1.1元組定義9p4=1,3,5,710print(f'p4={p4}')11u=[9,8,5]12p5=tuple(u)13print(f'p5={p5}')14p6=(3,)15print(f'p6={p6}')

4.1.1元組定義16print("p6'stypeis:",type(p6))17p7=()18print(f'p7={p7}')19print("p7'stypeis:",type(p7))20p8=tuple(range(1,10+1))21print(f'p8={p8}')

4.1.1元組定義第2行“p1=(3,5)”定義元組(3,5),賦給p1,p1可以表示平面上點(diǎn)的坐標(biāo),或平面上的一個矢量。第3行“print(f'p1={p1}')”在屏幕上輸出“p1=(3,5)”,注意,輸出元組時,自動添加一對圓括號。第4行“p2=(5,7,9)”將元組(5,7,9)賦給p2,p2可表示三維空間中的一個點(diǎn),或三維空間中的一個矢量。第5行“print(f'p2={p2}')”在屏幕上輸出“p2=(5,7,9)”。第6行“print("p2'stypeis:",type(p2))”在屏幕上輸出p2的類型,得到“p2'stypeis:<class'tuple'>”。

4.1.1元組定義第2行“p1=(3,5)”定義元組(3,5),賦給p1,p1可以表示平面上點(diǎn)的坐標(biāo),或平面上的一個矢量。第3行“print(f'p1={p1}')”在屏幕上輸出“p1=(3,5)”,注意,輸出元組時,自動添加一對圓括號。第4行“p2=(5,7,9)”將元組(5,7,9)賦給p2,p2可表示三維空間中的一個點(diǎn),或三維空間中的一個矢量。第5行“print(f'p2={p2}')”在屏幕上輸出“p2=(5,7,9)”。第6行“print("p2'stypeis:",type(p2))”在屏幕上輸出p2的類型,得到“p2'stypeis:<class'tuple'>”。

4.1.1元組定義第7行“p3=tuple((3,1,2))”為創(chuàng)建元組的標(biāo)準(zhǔn)方法,這里tuple為元組類型的類名,括號中的參數(shù)“(3,1,2)”為創(chuàng)建元組對象時設(shè)定的元組中各個元素的值,這里,表示創(chuàng)建一個包含3、1、2三個元素的元組。第8行“print(f'p3={p3}')”在屏幕上輸出元組p3,得到“p3=(3,1,2)”。第9行“p4=1,3,5,7”是一種非標(biāo)準(zhǔn)的創(chuàng)建元組的方法,不建議使用。在Python語言中,將這種形式的輸入自動設(shè)定為元組。第10行“print(f'p4={p4}')”輸出元組p4,得到“p4=(1,3,5,7)”。4.1.1元組定義第11行“u=[9,8,5]”得到列表u。第12行“p5=tuple(u)”也是一種標(biāo)準(zhǔn)的創(chuàng)建元組的方法,這里tuple為元組的類名,參數(shù)u為列表,將自動轉(zhuǎn)化為元組的形式,賦給p5。第14行“p6=(3,)”創(chuàng)建僅包含一個元素的元組,這種元組沒有意義。注意,這里的“,”號不能省略,因為“(3)”將表示整數(shù)3,其中的圓括號只是數(shù)據(jù)間的分界符,將被忽略。第15行輸出元組p6,得到“p6=(3,)”。第16行輸出p6的類型,得到“p6'stypeis:<class'tuple'>”,可見p6為一個元組。4.1.1元組定義第17行“p7=()”生成一個空元組,空元組沒有意義。第18行“print(f'p7={p7}')”輸出空元組p7。第19行“print("p7'stypeis:",type(p7))”輸出p7的類型,得到“p7'stypeis:<class'tuple'>”。第20行“p8=tuple(range(1,10+1))”由range對象生成元組,這里借助于類tuple的構(gòu)造方法生成元組p8,。第21行“print(f'p8={p8}')”輸出元組p8,得到“p8=(1,2,3,4,5,6,7,8,9,10)”。4.1.1元組定義程序執(zhí)行結(jié)果:模塊zym0401執(zhí)行結(jié)果4.1.1元組定義元組是一種復(fù)合數(shù)據(jù)類型,可以保存任意類型的數(shù)據(jù),這一點(diǎn)與列表相似。需要特別注意的是,元組中可以包含列表,而且其中的列表元素可以修改,這是因為元組中嵌入的列表僅是占位符,即元組使用了類似于“指針”或者“標(biāo)簽”的形式“引用”其中嵌入的列表,因此,對元組中列表的操作仍然是對列表的操作,而不是對元組的元素的操作,所以,元組中嵌入的列表中的元素可以修改。4.1.1元組定義包含不同數(shù)據(jù)類型的元組:1if__name__=='__main__':2a=(1,(2,3),[4,5],'HelloWorld',8,9,3.14,2.71828,1.414)3print('a=',a)4print("a'stypeis:",type(a))5a[2][1]=a[2][1]+36print('a=',a)4.1.1元組定義第2行“a=(1,(2,3),[4,5],'HelloWorld',8,9,3.14,2.71828,1.414)”定義元組a,其中包含了一個元組(2,3)、一個列表[4,5]、一個字符串“HelloWorld”、三個整數(shù)和三個浮點(diǎn)數(shù)。第3行“print('a=',a)”輸出元組a。第4行“print("a'stypeis:",type(a))”輸出元組a的類型。第5行“a[2][1]=a[2][1]+3”修改元組中列表“[4,5]”的第1個元)。第6行“print('a=',a)”輸出元組a。4.1.1元組定義程序執(zhí)行結(jié)果如下:模塊zym04024.1.1元組定義上程序段中關(guān)于只讀元組中的列表可修改的例子,進(jìn)一步說明Python語言中所有的數(shù)據(jù)名稱均為該數(shù)據(jù)的“標(biāo)簽”,Python語言中沒有“變量”的概念,數(shù)據(jù)的“標(biāo)簽”指向數(shù)據(jù)在內(nèi)存中的首地址。元組是只讀的,所以元組中的每個“標(biāo)簽”不能修改,其中的“列表”的標(biāo)簽也不能修改,但是,通過列表的“標(biāo)簽”訪問的列表的元素是可能修改的。4.1.1元組定義事實上,元組的作用在于表達(dá)類似于空間中點(diǎn)的坐標(biāo)(或矢量)之類的有序數(shù)據(jù),不宜用于其他用途。適合使用列表類型表示的數(shù)據(jù),不應(yīng)使用元組這種類型表示,因此,元組中嵌套列表不是一種好的數(shù)據(jù)表示。4.1.2元組元素訪問方法元組中的元素訪問方法與列表中的元素訪問方法相同。元組中元素的索引方式有兩種:一種為從左向右,索引號從0開始,從左向右遞增1;另一種從右向左,最后邊的元素(或稱元組最后的元素)的索引號為-1,從右向左遞減1??梢允褂谩埃骸碧栆淮涡栽L問元組的多個元素,有時也稱元組的“切片”訪問。4.1.2元組元素訪問方法1if__name__=='__main__':2a=(19,35,7,12,15,29,24,20,30,16,10,21)3print('a=',end='')4foreina:5print(e,end='')6print('\na=',end='')7foriinrange(len(a)):8print(a[i],end='')4.1.2元組元素訪問方法9print()10print(f'a={a}')11print(f'First:{a[0]},Last:{a[-1]}.')12print(a[2:2])13print(f'a[1]~a[1]:{a[1:2]}')14print(f'a[3]~a[8]:{a[3:8+1]}')15print(f'a[3],a[5],a[7]:{a[3:8+1:2]}')4.1.2元組元素訪問方法16print(f'a[-1]~a[-4]:{a[-1:-4-1:-1]}')第2行“a=(19,35,7,12,15,29,24,20,30,16,10,21)”定義元組a。第3行“print('a=',end='')”輸出“a=”且不換行。第4~5行為一個for結(jié)構(gòu),第4行“foreina:”遍歷元組a中的元素,對于每一個元素e,第5行“print(e,end='')”輸出e的值,后加一個空格。第4~5行說明元素為可迭代型的對象,可以使用for結(jié)構(gòu)逐個訪問元組中的元素。4.1.2元組元素訪問方法第6行先輸出換行符,再輸出“a=”。第7~8行為一個for結(jié)構(gòu),第7行“foriinrange(len(a)):”表示i從0按步長1遞增到len(a)-1,此時的每個i可作為元組中元素的索引號;對每個i,執(zhí)行第8行“print(a[i],end='')”輸出元組a中的各個元素??梢?,元組中元素的訪問可以借助于其索引號訪問,例如,a[0]為元組a的第0個元素。第9行“print()”輸出一個空白行。第10行輸出元組a,得到“a=(19,35,7,12,15,29,24,20,30,16,10,21)”。4.1.2元組元素訪問方法第11行“print(f'First:{a[0]},Last:{a[-1]}.')”輸出元組a的首元素和尾元素。第12行“print(a[2:2])”輸出一個空元組。這是因為“2:2”表示索引號從2至1,故將得到一個空元組。因此,使用了“:”訪問元組將返回一個元組。第13行“print(f'a[1]~a[1]:{a[1:2]}')”輸出一個元組,只包含元素a[1]。第14行“print(f'a[3]~a[8]:{a[3:8+1]}')”輸出一個元組,包含元素a[3]至a[8]。4.1.2元組元素訪問方法第15行“print(f'a[3],a[5],a[7]:{a[3:8+1:2]}')”輸出一個元組,包括元素a[3]、a[5]和a[7]。這里的“3:8+1:2”表示索引號從3至8,步長為2。第16行“print(f'a[-1]~a[-4]:{a[-1:-4-1:-1]}')”輸出一個元組,包含元素a[-1]至a[-4]。這里的“-1:-4-1:-1”(即“-1:-5:-1”)表示索引號從-1至-4,步長為-1。4.1.2元組元素訪問方法使用“:”訪問元組的部分內(nèi)容將返回一個新的元組。“m:n+1:k”表示索引號從m遞增到n,步長為k。如果k為1,可以省略。如果m省略,表示索引號從0開始;如果n+1省略表示索引到元組的最后一個元素。因此,a[:]和a的含義相同,均指整個元組a;而a[::2]表示得到一個新的元組,只包含原元組中偶數(shù)索引號上的元素。4.1.2元組元素訪問方法程序執(zhí)行結(jié)果:模塊zym0403執(zhí)行結(jié)果4.1.3元組元素訪問方法元組的內(nèi)置方法,或稱元組類的內(nèi)置方法,是指元組類內(nèi)部定義的公有方法。Python語言的內(nèi)置函數(shù),可以稱為全局函數(shù)。下面重點(diǎn)介紹表中所示的Python全局函數(shù)在元組上的用法,這里設(shè)元組a=(3,5,7,9)。4.1.3元組元素訪問方法4.1.3元組元素訪問方法1if__name__=='__main__':2a=(3,5,7,9)3s=len(a)4print(f'Lengthofa:{s}.')5print(f'MinandMaxofa:{min(a)},{max(a)}')6del(a)7a=tuple([3,5,7,9])8print(a)4.1.3元組元素訪問方法第2行“a=(3,5,7,9)”定義元組a。第3行“s=len(a)”獲得元組的長度4。第4行“print(f'Lengthofa:{s}.')”輸出“Lengthofa:4.”。第5行“print(f'MinandMaxofa:{min(a)},{max(a)}')”輸出元組a的最小值和最大值,得到“MinandMaxofa:3,9”。第6行“del(a)”刪除元組a。請注意,Python有“垃圾”回收機(jī)制,不使用的內(nèi)存“空間”將被自動回收。4.1.3元組元素訪問方法第7行再次對“標(biāo)簽”a賦值,原來的“a”將被自動從內(nèi)存中清除,因此,一般無需使用del函數(shù)。第7行“a=tuple([3,5,7,9])”得到一個新的元組a。注意,這里的a和第2行的a不是同一個a,盡管其內(nèi)容相同。第8行“print(a)”輸出元組a,得到“(3,5,7,9)”。4.1.4元組應(yīng)用實例元組可以視為其元素是常量的特殊“列表”,元組和列表均能“多變量”賦值,所謂的“多變量”賦值例如:[x,y,z]=[1,2,3]#借助于列表實現(xiàn)x=1、y=2和z=3(x,y,z)=(1,2,3)或a=(x,y,z)=(1,2,3)#借助于元組實現(xiàn)x=1、y=2和z=3上式可以簡寫為:x,y,z=1,2,3#借助于元組實現(xiàn)x=1、y=2和z=34.1.4元組應(yīng)用實例上述的“多變量”賦值,將把x、y和z約束為列表或元組的成員,可以直接使用這些變量,但如果給這些“變量”賦值時,實際上創(chuàng)建一個新的同名“變量”。因此,建議創(chuàng)建只讀的“標(biāo)簽”時,可以使用上述的“多變量”賦值,其他情況不建議使用。“多變量”賦值作為“只讀”的“標(biāo)簽”,這種情況最常用于是把元組作為函數(shù)的返回值,可以返回多個數(shù)據(jù)。4.1.4元組應(yīng)用實例例:輸入兩個正整數(shù),計算這兩個整數(shù)的最大公約數(shù)和最小公倍數(shù)1defmygcdlcm(a,b):2ifa>b:3a,b=b,a4ifb==0:5return(b,a)6n=a*b4.1.4元組應(yīng)用實例7whilea%b>0:8r=a%b9a=b10b=r11n=n//b12return(b,n)13if__name__=='__main__':14c=mygcdlcm(8,22)15print(c)4.1.4元組應(yīng)用實例第1~12行為函數(shù)mygcdlcm,具有兩個參數(shù)a和b,使用關(guān)鍵字“def”定義函數(shù)。第2~3行為一個if結(jié)構(gòu),判斷如果a大于b,則將a與b互換。第4~5行為一個if結(jié)構(gòu),判斷如果b為0,則輸出元組(b,a),此時b為最大公約數(shù),a為最小公倍數(shù)。第6行“n=a*b”將a與b的乘積賦給n。4.1.4元組應(yīng)用實例第7~10行為一個while循環(huán),這是求兩個整數(shù)的最大公約數(shù)的Euclid算法,此算法依據(jù)Euclide定理,即a與b的最大公約數(shù)也是b與a%b的最大公約數(shù)。用gcd表示求最大公約數(shù)的函數(shù),則gcd(a,b)=gcd(b,a%b)。一般地,將a與b中的較大者保存在a中,a與b中的較小者保存在b中,迭代公式(a,b)=(b,a%b)直到得到b能整除a,則b為a與b的最大公約數(shù)。這里的“(a,b)=(b,a%b)”表示將b賦給a,同時將a%b賦給b,運(yùn)算前的a與b和運(yùn)算后的a與b不占有相同的內(nèi)存空間。4.1.4元組應(yīng)用實例第11行“n=n//b”得到的n為a與b的最小公倍數(shù)。第12行“return(b,n)”返回元組,包含了a與b的最大公約數(shù)和最小公倍數(shù)。第14行“c=mygcdlcm(8,22)”調(diào)用函數(shù)mygcdlcm得到8與22的最大公約數(shù)和最小公倍數(shù),函數(shù)返回值以元組的形式,賦給c。第15行“print(c)”輸出c,得到“(2,88)”。02集合4.2集合Python語言中可定義集合這類數(shù)據(jù)類型。這里的“集合”是指數(shù)學(xué)集合論中的集合,即由一組無重復(fù)的無序元素組成的集合。在Python語言中,用花括號“{}”括起來且用逗號分隔的一組數(shù)據(jù)表示。集合中可以嵌套元組,但不能嵌套列表和另一個集合,這是因為集合的元素一定是確定的元素。集合中的元素沒有順序,無法通過索引號訪問,集合元素的處理需要通過集合的內(nèi)置方法實現(xiàn)。4.2.1集合定義集合由一組沒有重復(fù)的無序元素組成,集合的特點(diǎn)在于其每個元素都是唯一的且確定的。集合中的元素可以取基本類型的常量,也可以取為元組,但不能為列表和集合。下面的程序段展示集合的定義方法。4.2.1集合定義1if__name__=='__main__':2a={1,2,2,1,'a',(3,4),'Python','天空',complex(3,5),2.71}3print('Seta:',a)4b=list(a)5print('Listb:',b)6c=set()4.2.1集合定義7print('Emptyset:',c)8d=set([4,5,6,6,5])9print('Setd:',d)10e=set('anappletree')11print('Sete:',e)12print('Lengthofe:',len(e))4.2.1集合定義第2行“a={1,2,2,1,'a',(3,4),'Python','天空',complex(3,5),2.71}”定義集合a,其中有重復(fù)的元素,在保存時,自動將所有重復(fù)的元素僅保留一個;第3行“print('Seta:',a)”輸出集合a,得到“Seta:{1,2,2.71,(3,4),'天空','a','Python',(3+5j)}”,其中所有元素都是唯一的。第4行“b=list(a)”將集合a轉(zhuǎn)化為列表b;第5行“print('Listb:',b)”輸出列表b。注意,集合a轉(zhuǎn)化為列表b時,列表b將采用當(dāng)前的a的元素存儲順序。4.2.1集合定義第6行“c=set()”創(chuàng)建空集合c。由于集合和第4.3節(jié)的字典都使用花括號作為定界符,因此,一對空的“{}”將創(chuàng)建一個空字典,而非空集合,可能是因為Python設(shè)計人員認(rèn)為字典比集合更重要。第7行“print('Emptyset:',c)”輸出空集合c。第8行“d=set([4,5,6,6,5])”將一個列表轉(zhuǎn)化為集合,賦給d。第9行“print('Setd:',d)”輸出集合d。set是集合類的類名,可以將元組或列表轉(zhuǎn)化為集合。4.2.1集合定義第10行“e=set('anappletree')”將字符串“anappletree”轉(zhuǎn)化為集合,字符串中的每個字符作為集合的元素,并將重復(fù)的多個元素保留一個。第11行“print('Sete:',e)”輸出集合e。第12行“print('Lengthofe:',len(e))”輸出集合e的長度,即集合e的元素個數(shù)。4.2.1集合定義程序執(zhí)行結(jié)果:集合中的元素可為整數(shù)、字符串、單個字符、元組等,也可以為浮點(diǎn)數(shù)和復(fù)數(shù)。使用內(nèi)置函數(shù)len可以獲得集合的元素個數(shù),集合是可迭代的對象。模塊zym0409執(zhí)行結(jié)果4.2.2集合基本操作集合中的元素沒有順序,因此,集合中的元素沒有索引號,無法通過索引號訪問集合元素,只能將集合轉(zhuǎn)化為列表或元組再按索引號訪問各個元素。由于集合中的元素是可數(shù)的,集合也是可迭代對象,可以使用for結(jié)構(gòu)遍歷集合中的元素。集合的常用操作有三種,即集合的并集、交集和補(bǔ)集,后面表列出集合的常用操作,設(shè)全集為w={1,2,3,4,5,6,7,8,9,10},a={3,5,7,9},b={1,3,4,7,8,9}。4.2.2集合基本操作4.2.3集合內(nèi)置方法使用指令“print(dir(set))”可以查看集合類set的內(nèi)置公有方法。集合類內(nèi)置公有方法:4.2.3集合內(nèi)置方法4.2.3集合內(nèi)置方法4.2.4集合應(yīng)用實例現(xiàn)商場有一個抽獎游戲,箱子中有10張卡片,上面的數(shù)字為從1至10(無重復(fù))。在商場消費(fèi)后可有一次抽獎機(jī)會,從箱子中一次性取出3張卡片,將三張卡片上的數(shù)字相加,按其總和進(jìn)行領(lǐng)獎,若總和在5至15(含)間為三等獎,總和在16至21(含)間為二等獎,總和在22至27(含)間為一等獎。程序段4-12模擬了這一抽獎過程。4.2.4集合應(yīng)用實例1importrandom2if__name__=='__main__':3st=input('Begin(y/n)?')4whilest=='y':5points=set()6whilelen(points)<3:7x=random.randint(1,10)8points.add(x)4.2.4集合應(yīng)用實例9s=sum(points)10if5<=s<=15:11print(f'sum={s}.Thethridprize.')12elif16<=s<=21:13print(f'sum={s}.Thesecondprize.')14else:15print(f'sum={s}.Congratulations.Thefirstprize.')16st=input('Tryagain(y/n)?')4.2.4集合應(yīng)用實例程序執(zhí)行結(jié)果:進(jìn)行了5次抽獎實驗,每次實驗均給出了抽取到的3張卡片上的數(shù)字和。模塊zym0412執(zhí)行結(jié)果03字典4.3字典在Mathematica軟件中,有一種數(shù)據(jù)類型,稱為關(guān)聯(lián)。關(guān)聯(lián)有兩部分組成,合稱為“鍵—值對”,關(guān)聯(lián)和Python語言中的“字典”數(shù)據(jù)類型相似。字典的鍵類似于集合只能取基本數(shù)據(jù)類型或元組。由于“鍵”用于訪問其對應(yīng)的“值”,“鍵”應(yīng)取得簡單、易記、可讀性強(qiáng),且不能重復(fù)。字典創(chuàng)建好后,其“鍵”不能修改,但是“鍵”對應(yīng)的“值”可以修改。4.3.1字典定義字典的類型為dict類,每個字典數(shù)據(jù)為dict類定義的對象。簡單地講,字典是形如以下形式的數(shù)據(jù)表示:{鍵1:值1,鍵2:值2,鍵3:值3,……,鍵n:值n}字典中的所有“鍵”必須是唯一的,“鍵”只能為基本數(shù)據(jù)類型或元組(要求:元組幫為“鍵”時,元組的元素必須為確定性,而應(yīng)盡可能具有易記和可讀性強(qiáng)的特點(diǎn)。例如,如果“鍵”取為0、1、2、…,這樣的字典和列表在功能上沒有太大區(qū)別,因此,不是好的字典定義方式。4.3.1字典定義字典的定義方法:1if__name__=='__main__':2d1={'Apple':4.5,'Pear':3.8,'Peach':6.5}3print('d1=',d1)4d2={(1,2):'語文',(3,4):'數(shù)學(xué)',(5,6):'化學(xué)',(7,8):'物理'}5print('d2=',d2)6d3={}7print('Typeofd3:',type(d3))4.3.1字典定義8d4=dict(a=6,b=[5,4],c={3,2},d=(1,0),Else={'job':'student'})9print('d4=',d4)10d5=dict([('a',6),('b',[5,4]),('c',{3,2}),('d',(1,0)),('Else',{'job':'student'})])11print('d5=',d5)12d6={x:2*xforxin[4,5,6]}13print('d6=',d6)4.3.1字典定義14d7={x:2*xforxin(4,5,6)}15print('d7=',d7)16d8={x:d1[x]forxind1}17print('d8=',d8)18d9={'Tom':5,'Jerry':4,'Dog':6,'Jerry':5}19print('d9=',d9)4.3.1字典定義程序執(zhí)行結(jié)果如下:模塊zym0413執(zhí)行結(jié)果4.3.2字典基本操作字典元素的訪問方法有三種:(1)借助于“鍵”訪問。如果字典對象為d,“鍵”名為“key”,則d['key']得到該“鍵”對應(yīng)的“值”。該方式下,如果“鍵”不存在,將報錯;(2)借助于字典內(nèi)置的get方法訪問。設(shè)字典對象為d,“鍵”名為“key”,則d.get('key')得到該“鍵”對應(yīng)的“值”。該方式下,如果“鍵”不存在,則返回None;(3)在for循環(huán)中遍歷字典元素。4.3.2字典基本操作借助于for循環(huán)遍歷字典中的元素,也有三種方式,仍設(shè)字典對象為d,則三種方式依次為:(1)遍歷字典中的“鍵”,如“foreind:”或“foreind.keys():”;(2)遍歷字典中的“值”,如“foreind.values():”;(3)同時遍歷字典中的“鍵值對”,如“foreind.items():”。4.3.2字典基本操作1if__name__=='__main__':2d1={'Apple':4.5,'Pear':3.8,'Peach':6.5,'Banana':5.2}3print(f"Apple'sprice:{d1['Apple']}.")4print(f"Apple'sprice:{d1.get('Apple')}.")5foreind1:6ife=='Apple':7print(f"{e}'sprice:{d1[e]}.")8foreind1.keys():4.3.2字典基本操作9ife=='Apple':10print(f"{e}'sprice:{d1[e]}.")11s=012foreind1.values():13s=s+e14print(f'Totalprice:{s}.')15foreind1.items():16print(e)17ife[0]=='Apple':4.3.2字典基本操作18print(f"{e[0]}'sprice:{e[1]}.")19d1['Apple']=7.820print('d1=',d1)21d1['Strawberry']=9.122print('d1=',d1)23ifd1.get('Watermelon')==None:24print('Nowatermelon.')25else:26print('Havewatermelon.')4.3.2字典基本操作程序執(zhí)行結(jié)果:模塊zym0414執(zhí)行結(jié)果4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)字典內(nèi)置方法是指字典類中的公有方法,這類方法由字典調(diào)用;內(nèi)置函數(shù)指Python語言的內(nèi)置函數(shù),可以作用于Python語言中的各種數(shù)據(jù)類型定義的對象。Python語言中常用于字典的內(nèi)置函數(shù)如表所示。表中設(shè)字典為d。4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)用于字典的內(nèi)置函數(shù):序號函數(shù)名含義實例1len統(tǒng)計字典中的元素個數(shù)(字典的一個“元素”是指一個“鍵值對”)len(d)返回d的元素個數(shù)2sum求字典的“鍵”或“值”的和(要求“鍵”和“值”必須為數(shù)值類型)sum(d)和sum(d.keys())含議相同,用于計算“鍵”的和;sum(d.values())用于計算“值”的和3type返回字典的類型type(d)返回“<class'dict'>”4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)序號函數(shù)名含義實例4isinstance判斷參數(shù)的類型isinstance(d,dict)返回True5str將字典轉(zhuǎn)化為字符串str(d)返回一個字符串d6zip將多個列表或元組組合成一個以元組為元組的可迭代器,該迭代器的第i個元組的元素由各個列表或元組的第i個元素組成。只有組合了兩個列表或元組的zip才能轉(zhuǎn)化為字典foreinzip([1,2,3],(4,5,6),[7,8,9]):print(e)上述代碼得到(1,4,7),(2,5,8),(3,6,9)當(dāng)zip組合兩個列表或元組時,可借助于dict將zip對象轉(zhuǎn)化為字典,這是一種生成字典的快捷方法4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)字典類內(nèi)置公有方法序號方法名含義實例1get以字典的“鍵”為參數(shù),返回字典中該“鍵”對應(yīng)的“值”d.get('a')得到12values返回字典的全部“值”組成的對象,常需借助于list轉(zhuǎn)化為列表list(d.values())得到[1,2,3]3keys返回字典的全部“鍵”組成的對象,常需借助于list轉(zhuǎn)化為列表list(d.keys())得到['a','b','c']4items返回字典的全部元素組成的對象,每個元素為一個“鍵值對”,并將“鍵”和“值”組合為一個元組。常借助于list轉(zhuǎn)化為列表list(d.items)得到[('a',1),('b',2),('c',3)]4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)5setdefault以“鍵”和“值”作為參數(shù),將兩者組成的“鍵值對”添加到字典中,如果“值”省略,則將None作為該“鍵”的值d.setdefault('d',4),此后的d為{'a':1,'b':2,'c':3,'d':4}6update以一個字典作為參數(shù),將該字典中的全部元素添加到調(diào)用該函數(shù)的字典中d.update({'d':4,'e':5}),執(zhí)行后的d為{'a':1,'b':2,'c':3,'d':4,'e':5}7fromkeys第一個參數(shù)可以為列表、元組或集合,這個參數(shù)的每個元素將作為“鍵”;第二個參數(shù)指定這些“鍵”的值,這個參數(shù)將作為所有“鍵”的值。如果第二個參數(shù)省略,每個“鍵”的“值”將設(shè)為Nonee=dict.fromkeys(['a','b','c'],1),將得到字典e為{'a':1,'b':1,'c':1};而e=dict.fromkeys(['a','b','c']),將得到字典e為{'a':None,'b':None,'c':None}4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)8copy將一個字典復(fù)制到另一個字典。這是一種“深”復(fù)制(或稱“探”拷貝),即“深”復(fù)制后兩個字典占有不同的存儲空間,互不影響e=

d.copy()print(id(e))print(id(d))#d和e占不同內(nèi)存e['a']=3print(d)print(e)#d和e互不影響這時,e與d內(nèi)容相同,但e與d占有不同內(nèi)存空間,故互不影響。對e修改后,不影響d9=對比copy,“=”是一種“淺”復(fù)制,即“淺”復(fù)制后兩個字典共用一個存儲空間,互相影響e=d#淺復(fù)制print(id(e))print(id(d))#d和e內(nèi)存相同e['a']=3print(d)print(e)對e的“鍵”a賦值3,將同時影響到d,此時的d為{'a':3,'b':2,'c':3}4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)10clear清空字典d.clear()后d為空字典“{}”11pop以字典的“鍵”為參數(shù),刪除該“鍵”對應(yīng)的“值”,該“值”作為pop函數(shù)的返回值。如果“鍵”不存在,將報錯print(d.pop('a'))#輸出1print(d)#輸出{'b':2,'c':3}12popitem刪除字典中的最后一個元素,并將該元素轉(zhuǎn)化為一個元組作為返回值print(d.popitem())#輸出('c',3)print(d)#輸出{'a':1,'b':2}4.3.4字典應(yīng)用實例字典在處理具有多種屬性的“對象”時具有優(yōu)勢,例如,要顯示一個學(xué)生的基本信息,例如,姓名、年齡、性能和身高等,用字典比用列表更加方便?,F(xiàn)有如表所示的幾個學(xué)生信息,使用程序段對其進(jìn)行存儲和輸出。姓名年齡性別愛好張飛18男籃球、唱歌關(guān)羽19男籃球、足球貂蟬17女繪畫、跳舞4.3.4字典應(yīng)用實例1if__name__=='__main__':2students={'張飛':{'年齡':18,'性別':'男','愛好':'籃球、唱歌'},3'關(guān)羽':{'年齡':19,'性別':'男','愛好':'籃球、足球'},4'

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論