




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Python3基礎教程第2版 慕課版第5章 程序控制結構本章主要內容:分支結構循環(huán)結構異常處理5.1 程序的基本結構程序的三種基本結構為:順序結構、分支結構和循環(huán)結構。順序結構的程序按語句的先后順序依次執(zhí)行各條語句。通常,程序默認為順序結構Python總是從程序的第一條語句開始,按順序依次執(zhí)行語句。典型的順序結構。#輸入兩個整數(shù),用不同的轉換方法a=eval(input(請輸入第1個整數(shù):)b=int(input(請輸入第2個整數(shù):)#將a轉換為浮點數(shù)輸出print(float(%s)= % a,float(a)print(格式化為浮點數(shù):%e,%f % (a,b)#創(chuàng)建復數(shù)輸出print(c
2、omplex(%s,%s)= % (a,b),complex(a,b)分支結構指程序根據(jù)條件執(zhí)行不同的代碼塊。分支結構又可分為單分支結構、雙分支結構和多分支結構,示例代碼如下。if x0: print(%s是正數(shù) % x)#條件x0成立時執(zhí)行該語句else: print(%s小于等于0 % x)#條件x0不成立時執(zhí)行該語句循環(huán)結構指程序根據(jù)條件重復執(zhí)行同一個代碼塊示例代碼如下。for x in range(5):#x依次取0、1、2、3、4 print(x)#重復執(zhí)行該語句5次5.2 分支結構Python使用if語句實現(xiàn)程序的分支結構,包括單分支結構、雙分之結構和多分支結構。本節(jié)主要內容:單分
3、支結構雙分支結構多分枝結構ifelse三元表達式5.2.1 單分支結構單分支if語句的基本結構如下。if條件表達式:語句塊當條件表達式計算結果為True時,執(zhí)行語句塊中的代碼否則,不執(zhí)行語句塊中的代碼。單分支if語句的執(zhí)行流程如圖所示示例代碼如下。 x=5 if x0 :. print(x,是正數(shù)).5 是正數(shù)5.2.2 雙分支結構雙分支if語句的基本結構如下。if條件表達式:語句塊1else: 語句塊2當條件表達式計算結果為True時,執(zhí)行語句塊1中的代碼;否則,執(zhí)行語句塊2中的代碼。雙分支if語句的執(zhí)行流程如圖所示示例代碼如下。 x=-5 if x0 :. print(x,是正數(shù)). el
4、se:. print(x,不是正數(shù)).-5 不是正數(shù)5.2.3 多分支結構多分支if語句的基本結構如下。if條件表達式1:語句塊1elif 條件表達式2:語句塊2elif 條件表達式n:語句塊nelse:語句塊n+1else部分可以省略。多分支if語句的執(zhí)行流程如圖所示示例代碼如下。 x=85 if x60:. print(不及格). elif x70:. print(及格). elif x a=2 b=3 x=a if ab else b#a x2 x=a if ab else b#ab結果為False,將b的值3賦值給x x3列表三元表達式基本格式如下。 表達式1 , 表達式2 條件表達式
5、當條件表達式計算結果為False時,將表達式1的值作為三元表達式的值;否則,將表達式2的值作為三元表達式的值示例代碼如下。 x=5 y=10 x,yxy#x x,yxy #xy結果為False,返回x的值55.3 循環(huán)結構本節(jié)主要內容:for循環(huán)while循環(huán)循環(huán)控制:continue、break5.3.1 遍歷循環(huán):forfor語句實現(xiàn)遍歷循環(huán),其基本格式如下。for var in object :循環(huán)體else:語句塊2else部分可以省略。object是一個可迭代對象。for語句執(zhí)行時,依次將object中的數(shù)據(jù)賦值給變量var該操作稱為迭代。var每賦值一次,則執(zhí)行一次循環(huán)體。循環(huán)執(zhí)行
6、結束時,如果有else部分,則執(zhí)行對應的語句塊。else部分只在正常結束循環(huán)時執(zhí)行。如果用break跳出循環(huán),則不會執(zhí)行else部分。在for語句中,用n表示object中數(shù)據(jù)的位置索引,for語句循環(huán)的執(zhí)行流程如圖所示示例代碼如下。#用x迭代元組中的對象,其中包含了一個嵌套的子元組 for x in (1,2,3,(4,5):. print(x).123(4, 5) for x in book: #用x迭代字符串中的每個字符. print(x).book for x in (1,2,3):. print(x*2). else:#else部分在循環(huán)正常結束時執(zhí)行. print(loop ove
7、r).246loop over2使用range()函數(shù)可以使用range()函數(shù)來生成包含連續(xù)多個整數(shù)的range對象,其基本格式為: range(end) range(start,end,step)只指定一個參數(shù)(end)時,生成整數(shù)范圍為0end-1。指定兩個參數(shù)(start和end)時,生成整數(shù)范圍為startend-1。整數(shù)之間的差值為step,step默認為1。示例代碼如下。 for x in range(3):. print(x).012 for x in range(-2,2):. print(x).-2-101 for x in range(-2,2,2):. print(x)
8、.-20可在for循環(huán)中用多個變量來迭代序列對象,示例代碼如下。 for (a,b) in (1,2),(3,4),(5,6):. print(a,b).1 23 45 6#等價于 for a,b in (1,2),(3,4),(5,6):與賦值語句類似,可以用“*”表示給變量賦值一個列表,示例代碼如下。 for (a,*b) in (1,2,abc),(3,4,5):. print(a,b).1 2, abc3 4, 54嵌套的for循環(huán)Python允許嵌套使用for循環(huán),即在for循環(huán)內部使用for循環(huán)。例如,下面的代碼輸出100以內的素數(shù)除了1和它本身之外不能被其他數(shù)整除的數(shù)是素數(shù)。pr
9、int(1,2,3,end= ) #1、2、3是素數(shù),直接輸出,end= 使后續(xù)輸出不換行for x in range(4,100): for n in range(2,x): if x%n=0: #若余數(shù)為0,說明x不是素數(shù),結束當前for循環(huán) break else: print(x,end= )#正常結束for循環(huán),說明x是素數(shù),輸出else:print(over)5.3.2 無限循環(huán):while1while語句循環(huán)的基本結構while語句基本結構如下。while條件表達式:循環(huán)體else:語句塊2,else部分語句可以省略。while語句循環(huán)的執(zhí)行流程如圖所示。如果條件表達式始終為Tru
10、e,則構造無限循環(huán)也稱“死循環(huán)”。計算1+2+100。s=0n=1 while n=100: s=s+n n=n+1print(1+2+.+100=,s)用while循環(huán)來輸出100以內的素數(shù)。x=1while x100: n=2 while nx-1: if x%n=0:break#若余數(shù)為0,說明x不是素數(shù),結束當前循環(huán) n+=1 else: print(x,end= )#正常結束循環(huán),說明x沒有被任何數(shù)整除,是素數(shù),輸出 x+=1else:print(over)2嵌套使用while循環(huán)Python允許在while循環(huán)的內部使用while循環(huán)。例如,下面的代碼輸出九九乘法表。a=1whil
11、e a10: b=1 while b=a: print(%d*%d=%2d % (a,b,a*b),end= ) b+=1 print() a+=15.3.3 循環(huán)控制:break和continue在for循環(huán)和while循環(huán)中可以使用break和continue語句。break語句用于跳出當前循環(huán),即提前結束循環(huán)(包括跳過else)。continue則用于跳過循環(huán)體剩余語句,回到循環(huán)開頭開始下一次循環(huán)。用for循環(huán)找出100999范圍內的前10個回文數(shù)字3位數(shù)中個位和百位相同的數(shù)字為回文數(shù)字。a=n=0for x in range(100,999): s=str(x) if s0!=s-1:
12、 continue#如果x不是回文數(shù)字,回到循環(huán)開頭,x取下一個值開始循環(huán) a.append(x)#x是回文數(shù)字,將其加入列表 n+=1#累計獲得的回文數(shù)字個數(shù) if n=10:break#找出10個回文數(shù)字時,跳出for循環(huán)print(a)#break跳出時,跳轉到該處執(zhí)行將上面的代碼中的for循環(huán)改為while循環(huán),可以實現(xiàn)相同的功能,代碼如下。a= ; n=0 ; x=100while x999: s=str(x) if s0!=s-1: x=x+1 continue#x如果不是回文數(shù)字,回到循環(huán)開頭,x取下一個值開始循環(huán) a.append(x)#x是回文數(shù)字,將其加入列表 n+=1#累
13、計獲得的回文數(shù)字個數(shù) x=x+1 if n=10:break#找出10個回文數(shù)字時,跳出while循環(huán)print(a)#break跳出時,跳轉到該處執(zhí)行5.4 異常處理本節(jié)主要內容:異常處理基本結構捕捉多個異常 exceptas捕捉所有異常異常處理結構的嵌套 tryfinally終止行為 raise語句異常鏈:異常引發(fā)異常assert語句異常指程序在運行過程中發(fā)生的錯誤,異常會導致程序意外終止。異常處理可捕捉程序中發(fā)生的異常,執(zhí)行相應的處理代碼,避免程序意外終止。程序中的語法錯誤不屬于異常。5.4.1 異常處理基本結構異常處理的基本結構如下。try: 可能引發(fā)異常的代碼except 異常類型名
14、稱: 異常處理代碼else: 沒有發(fā)生異常時執(zhí)行的代碼finally: 不管是否發(fā)生異常,都會執(zhí)行的代碼在處理異常時,將可能引發(fā)異常的代碼放在try語句塊中。在except語句中指明捕捉處理的異常類型名稱,except語句塊中為異常處理代碼。程序運行時,如果try語句塊中的代碼發(fā)生了指定異常,則執(zhí)行except語句塊。else語句塊中為沒有發(fā)生異常時執(zhí)行的代碼,else語句塊可以省略。finally部分的代碼不管是否發(fā)生異常都會執(zhí)行,可以省略finally語句塊。示例代碼while True: n=eval(input(請輸入一個正整數(shù):) if n=-1: break#輸入為-1時結束程序
15、if n0: continue #計算n的階乘 s=1 for x in range(2,n+1):#當n不是整數(shù)時,會發(fā)生TypeError異常 s*=xprint(%s!= % n,s)捕捉異常while True: try: n=eval(input(請輸入一個正整數(shù):) if n=-1: break #輸入為-1時結束程序 if n x=1,2 try:. x0/0. except ZeroDivisionError:. print(除0錯誤). except IndexError:. print(索引下標超出范圍). else:. print(沒有錯誤).除0錯誤5.4.3 exce
16、ptas在except語句中可以使用as為異常類創(chuàng)建一個實例對象 x=1,2 try:. x0/0#此處引發(fā)除0異常. except (ZeroDivisionError,IndexError) as exp:#處理多種異常. print(出錯了:). print(異常類型:,exp._class_._name_)#輸出異常類名稱. print(異常信息:,exp)#輸出異常信息.出錯了:異常類型: ZeroDivisionError異常信息: division by zero5.4.4 捕捉所有異常except語句省略了異常類型,則不管發(fā)生何種類型的異常,均會執(zhí)行except語句塊中的異常處
17、理代碼 try:. 2/0#引發(fā)除0異常. except:. print(出錯了).出錯了sys.exc_info()方法sys.exc_info()方法返回一個三元組:(type,value,traceobj)type為異常類的類型,可用_name_屬性獲得異常類的名稱。value為異常類的實例對象,直接將其輸出可獲得異常描述信息。traceobj是一個堆棧跟蹤對象(traceback類的實例對象),使用traceback模塊的print_tb()方法可獲得堆棧跟蹤信息示例代碼 x=1,2,3 try:. print(x3). except:. import sys. x=sys.exc_i
18、nfo(). print(異常類型:%s % x0._name_). print(異常描述:%s % x1). print(堆棧跟蹤信息:). import traceback. traceback.print_tb(x2)5.4.5 異常處理結構的嵌套Python允許在異常處理結構的內部嵌套另一個異常處理結構。在發(fā)生異常時,沒有被內部捕捉處理的異常可以被外層捕捉。 x=1,2 try:. try:. 5/0. except ZeroDivisionError:. print(內部除0異常). x2/2 #內部沒有捕捉的異常. except IndexError:. print(外層下標越界異
19、常)5.4.6 tryfinally終止行為不管try語句塊中是否發(fā)生異常,finally語句塊中的代碼都會執(zhí)。try: print(5/0)#發(fā)生除0異常except: print(出錯了!)#發(fā)生異常后執(zhí)行該語句finally: print(finally部分已執(zhí)行!)#不管是否發(fā)生異常,都會執(zhí)行該語句print(over)#異常處理結構的后續(xù)代碼5.4.7 raise語句raise語句基本格式如下。raise異常類名#創(chuàng)建異常類的實例對象,并引發(fā)異常raise 異常類實例對象#引發(fā)異常類實例對象對應的異常raise#重新引發(fā)剛發(fā)生的異常Python執(zhí)行raise語句時,會引發(fā)異常并傳遞異
20、常類的實例對象。1用類名引發(fā)異常在raise語句中指定異常類名時,會創(chuàng)建該類的實例對象,然后引發(fā)異常,示例代碼如下。 raise IndexError#引發(fā)異常Traceback (most recent call last): File , line 1, in IndexError2用異常類實例對象引發(fā)異常可以直接使用異常類實例對象來引發(fā)異常,示例代碼如下。 x=IndexError()#創(chuàng)建異常類的實例對象 raise x#引發(fā)異常Traceback (most recent call last): File , line 1, in 3傳遞異常不帶參數(shù)的raise語句可再次引發(fā)剛發(fā)生過的異常,其作用就是向外傳遞異常,示例代碼如下。 try:. raise IndexError#引發(fā)IndexError異常. except:. print(出錯了). raise #再次引發(fā)IndexError異常4指定異常信息在使用raise語句引發(fā)異常時,可以為異常類指定描述信息。 raise IndexError(索引下標超出范圍)Traceback (most recent call last): File , line 1, in IndexError: 索引下標超出范圍 raise
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農民安置房用地租賃合同
- 2025年度旅游度假區(qū)物業(yè)管理及資源開發(fā)合同
- 二零二五年度國有土地協(xié)議出讓與城市更新改造合同
- 二零二五餐飲企業(yè)廚房員工招聘與職業(yè)發(fā)展協(xié)議
- 二零二五年度企業(yè)員工工資支付與勞動合同
- 二零二五年度小區(qū)業(yè)主裝修工程進度款支付監(jiān)管協(xié)議
- 二零二五年度手車商個人身份二手車買賣信息保密合同
- 二零二五年度股權轉讓協(xié)議違約責任及賠償協(xié)議
- 二零二五年度土地經(jīng)營權轉讓合同協(xié)議
- 二零二五年度智能硬件擔保借款合同模板
- 2024-2025學年高一上學期期末數(shù)學試卷(新題型:19題)(基礎篇)(含答案)
- 高血壓課件教學課件
- 《鐵道概論(第二版)》 課件 第8章 鐵路運輸組織
- lng加工合同范例
- 2024解析:第十六章電壓和電阻-基礎練(解析版)
- 湖北聯(lián)投集團2024校園招聘【298人】管理單位遴選500模擬題附帶答案詳解
- 機柜 施工方案
- 設計質量、進度、安全、保密等管理方案及保障措施
- 單片機應用技術學習通超星期末考試答案章節(jié)答案2024年
- 文藝復興史學習通超星期末考試答案章節(jié)答案2024年
- 產(chǎn)后出血-教學查房
評論
0/150
提交評論