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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(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)可以實(shí)現(xiàn)所有的計(jì)算機(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ì)算機(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:rkrwcq1.')第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ù)計(jì)算兩點(diǎn)間的距離。第11行輸出兩個(gè)點(diǎn)A和B以及它們的歐氏距離d。模塊zym0301執(zhí)行結(jié)果02分支結(jié)構(gòu)3.2分支結(jié)構(gòu)程序的分支結(jié)構(gòu)用于實(shí)現(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)鍵字實(shí)現(xiàn)分支控制。3.2.1if語句if語句具有四種常用結(jié)構(gòu),如下所示:(1)單個(gè)if結(jié)構(gòu)if條件表達(dá)式:

語句1

……

語句n上述結(jié)構(gòu)為單個(gè)if結(jié)構(gòu),即當(dāng)“條件表達(dá)式”為真時(shí),執(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á)式”為真時(shí),執(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”為真時(shí),執(zhí)行“語句1”至“語句k”;否則,如果“條件表達(dá)式2”為真時(shí),執(zhí)行“語句k+1”至“語句m”;否則,如果“條件表達(dá)式3”為真時(shí),執(zhí)行“語句m+1”至“語句p”;否則,當(dāng)上述所有“條件表達(dá)式”均為假時(shí),執(zhí)行“else”部分的“語句t”至“語句n”。3.2.1if語句(4)if語句的嵌套結(jié)構(gòu)if結(jié)構(gòu)中的if部分、else部分和elif部分中均可再嵌入if結(jié)構(gòu),此時(shí),注意各個(gè)部分的縮進(jìn)關(guān)系,以保證if部分與其相應(yīng)的elif或else部分相一致,不至于出現(xiàn)“張冠李戴”的問題。3.2.1if語句例:輸入一數(shù)值x,計(jì)算分段函數(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行為一個(gè)功能模塊,求解上述的“問題”。第1行“x=input(‘Pleaseinputanumber:’)”從鍵盤輸入一個(gè)表達(dá)數(shù)值的字符串給x。第2行“x=float(x)”將x轉(zhuǎn)化為浮點(diǎn)數(shù),仍用x作為標(biāo)簽。第3行“y=0”將0賦給y。第4~11行為一個(gè)多分支結(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;在上述情況都不成立時(shí),執(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)“條件”為真時(shí),將“表達(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ù)值、邏輯值、列表、元組和字典等,每個(gè)case部分可以添加條件限制,用“if表達(dá)式”表示。當(dāng)match后面的“表達(dá)式”與某個(gè)case后面的表達(dá)式匹配后,則執(zhí)行該case部分的語句。3.2.2match語句例:當(dāng)輸入x為0或1或2時(shí),輸出“低分”;當(dāng)輸入3或4,輸出“中分”;當(dāng)輸入5時(shí),輸出“高分”;當(dāng)輸入小于0或大于5的數(shù)時(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:'))”從鍵盤讀取一個(gè)整數(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時(shí),執(zhí)行第5行語句“print('Lowmark.')”,即輸出“Lowmark.”。這里的“|”表示“或”。第6行“case3|4:”表示x的值為3或4時(shí),執(zhí)行第7行“print('Mediummark.')”,輸出“Mediummark.”。3.2.2match語句第8行“case5:”表示x的值為5時(shí),將執(zhí)行第9行輸出“Highmark.”。第10行“case_ifx>5:”表示當(dāng)x的值不滿足前面的各種case情況時(shí),且滿足限定條件x大于5時(shí),將執(zhí)行第11行“print('Inputistoobig.')”,輸出“Inputistoobig.”。第12行“case_ifx<0:”表示當(dāng)x的值不滿足前面的各種case情況且滿足限定條件x小于0時(shí),將執(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語言中,只有兩個(gè)循環(huán)控制方式,即while結(jié)構(gòu)和for結(jié)構(gòu)。while結(jié)構(gòu)有時(shí)稱為“當(dāng)型”循環(huán),即當(dāng)while后的表達(dá)式為真時(shí),執(zhí)行while結(jié)構(gòu)中的語句;如果while后的表達(dá)式為假,則跳過while結(jié)構(gòu)執(zhí)行其后的語句。3.3.1while結(jié)構(gòu)Python語言中,只有兩個(gè)循環(huán)控制方式,即while結(jié)構(gòu)和for結(jié)構(gòu)。while結(jié)構(gòu)有時(shí)稱為“當(dāng)型”循環(huán),即當(dāng)while后的表達(dá)式為真時(shí),執(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”為真時(shí),循環(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á)式”為假時(shí),將跳出while結(jié)構(gòu),執(zhí)行其后的語句,所以有沒有“else:”,“語句m+1”至“語句n”總被執(zhí)行到。但是有一個(gè)例外,這個(gè)例外和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語句將跳出整個(gè)while-else結(jié)構(gòu),因此,如果在while部分執(zhí)行時(shí)遇到了break語句,將跳出整個(gè)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)表示:在“元素”遍歷“可迭代對象”中的全部元素的過程中,對于每一個(gè)“元素”,執(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)表示:在“元素”遍歷“可迭代對象”中的全部元素的過程中,對于每一個(gè)“元素”,執(zhí)行“語句1”至“語句m”。當(dāng)“可迭代對象”中的全部元素遍歷完成后,執(zhí)行“else:”部分的“語句m+1”至“語句n”。表面上,有無“else:”,“語句m+1”至“語句n”都將在for部分的循環(huán)語句執(zhí)行完后被執(zhí)行到。但是,有一個(gè)例外,即當(dāng)for部分中含有break語句時(shí),如果執(zhí)行到break語句,將跳出整個(gè)for-else結(jié)構(gòu),執(zhí)行else部分后面的語句。這種情況和while-else結(jié)構(gòu)中遇到break語句的情況類似。3.3.2for結(jié)構(gòu)使用while結(jié)構(gòu)實(shí)現(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)控制的典型用法實(shí)例,這里列舉兩種常用的排序方法:冒泡排序法和選擇排序法。這里主要介紹冒泡排序法。對于一個(gè)列表a,設(shè)其具有n個(gè)元素(a[0]至a[n-1]),使用冒泡排序法將其中元素從小至大排序的基本原理為:(1)把最大的數(shù)排至末尾。從列表a的第0個(gè)元素開始,從左向右依次比較相鄰的兩個(gè)元素,將小的元素放在前面,大的元素放在后面。3.4排序?qū)嵗?)只考慮列表中未排序的元素,將這些元素中最大的數(shù)排至這些元素的末尾。重復(fù)這一過程,直到列表中末排序的元素只剩下a[0]。冒泡排序法實(shí)例: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

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論