




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Python程序設計
第三章流程控制本章知識點導圖流程控制是用來控制程序中各語句的執(zhí)行順序,即程序運行時,個別的指令(或是陳述、子程序)運行或求值的順序。主要可以分為以下三種結構:順序結構、判斷結構和循環(huán)結構。
一、順序結構順序結構指程序從上向下依次執(zhí)行每條語句的結構,順序結構是整個程序執(zhí)行的主干。
采用順序結構的程序將直接按行順序執(zhí)行代碼,直到程序結束。流程圖如下3-2所示。圖3-2
順序結構流程圖【例3-1】如我們從鍵盤輸入兩個變量a=1和b=2,并將a除以b的值賦值給c1,再將a、b的值交換,再次計算a除以b的值賦值給c2,并將c1和c2的值輸出顯示在一行,中間用分號隔開。分析上面要求:1.從鍵盤輸入a和b兩個變量的值;2.轉換a和b的值為數(shù)值型;3.將a除以b的值賦值給c1;4.將a、b的值互換;5.計算a除以b的值賦值給c2;6.將c1和c2的值打印輸出在屏幕上為一行。以上就是一個按順序執(zhí)行代碼的例子,具體的實現(xiàn)代碼如下。In[1]:a=input("pleaseinputa:")...:b=input("pleaseinputb:")...:...:a=int(a)...:b=int(b)...:...:c1=a/b...:...:a,b=b,a...:...:c2=a/b...:...:print('c1=',c1,';','c2=',c2)代碼1:執(zhí)行代碼并輸入1和2,結果顯示如下。pleaseinputa:1pleaseinputb:2c1=0.5;c2=2.0input()函數(shù)的功能是接收來自鍵盤的輸入,如代碼1首先要接收來自鍵盤的輸入a和b的值。
為了給用戶一個友好的界面,提醒用戶輸入,可以在input()函數(shù)的括號內寫入一些信息,如本例input("pleaseinputa:")。input()函數(shù)將用戶輸入的內容作為字符串形式返回,也就是說,就算輸入的是數(shù)字,但返回的“數(shù)字”的類型仍然是字符型,如輸入的是數(shù)字1,input()接收到的也確實顯示的是“1”,是加了引號的“1”!當用type()函數(shù)查一下它的類型時會顯示是str型。在input()函數(shù)接收到的“數(shù)字”參與計算時,需要將接收到的“數(shù)字”轉換為數(shù)值型。若需要整型,則使用int()函數(shù)轉換,若需要小數(shù)浮點型,則使用float()函數(shù)轉換。例如,將接收到的數(shù)字轉化為浮點型,可以寫成float(input("請輸入小數(shù):"))。>>>a=input("請您輸入數(shù)字:")請您輸入數(shù)字:12>>>a'12'>>>type(a)<class'str'>>>>b=input('等您輸入呢:')等您輸入呢:abc>>>b'abc'>>>type(b)<class'str'>二、判斷結構判斷結構也稱選擇結構,增加了在程序中的判斷機制,執(zhí)行條件代碼,看它的結果是真還是假,真則執(zhí)行,假則不執(zhí)行,或者執(zhí)行其他的代碼。常使用if/else或者if/elif/…/else結構。if-else判斷結構句式如下,代碼流程圖如圖3-3所示。if
條件:block1else:block2圖3-3
判斷結構流程圖在執(zhí)行時先執(zhí)行“if
條件:”,如果結果為真,則執(zhí)行其下的“block1”,否則執(zhí)行“block2”,當判斷分支不止一個時,可選擇“if-elif-else”結構,這里的elif可以有多個。if
條件:block1elif
條件2:block2else:block3對于一元二次方程來說,判斷解的個數(shù)是根據(jù)Δ?的值來判斷的,對于如下方程:解的情況如下。當:?無解???程序代碼流程如下:?1)輸入A、B、C?2)計算??Δ?
3)判斷解的個數(shù)4)計算解?
5)輸出解代碼2:#輸入A、B、CIn[2]:A=float(input("輸入A:"))...:B=float(input("輸入B:"))...:C=float(input("輸入C:"))...:...:#計算delta...:delta=B**2-4*A*C...:...:#判斷解的個數(shù)...:ifdelta<0:...:print("該方程無解!")...:elifdelta==0:...:x=B/(-2*A)...:print("x1=x2=",x)...:else:...:#計算x1、x2...:x1=(B+delta**0.5)/(-2*A)...:x2=(B-delta**0.5)/(-2*A)...:print("x1=",x1)...:print("x2=",x2)【例3-2】運行上面的代碼,求下面三個方程的解。1、不存在解:執(zhí)行代碼2,輸入系數(shù)1,2,6,運行結果輸出如下:輸入A:1輸入B:2輸入C:6該方程無解!2、存在一個解:再次執(zhí)行代碼2,輸入系數(shù)1,-4,4,運行結果輸出如下:輸入A:1輸入B:-4輸入C:4x1=x2=2.0輸入A:1輸入B:4輸入C:2x1=-3.414213562373095x2=-0.58578643762690493、存在兩個解:再次執(zhí)行代碼2,輸入系數(shù)1,4,2,運行結果輸出如下:三、循環(huán)結構當反復執(zhí)行某個或某些操作直至條件為假或為真才停止的一個過程,這個重復的過程稱之為循環(huán)結構。循環(huán)結構包括while循環(huán)與for循環(huán)。1.for循環(huán)
for循環(huán)常用來遍歷一個序列的類型,如列表、集合、字符串、字典等,for循環(huán)較while循環(huán)而言,在程序中用到的會更為普遍。
假設A是一個集合,element代表A中的元素,for循環(huán)可以將A中的元素逐個地取出,每取一次A中的元素element都執(zhí)行一次“循序塊”動作,格式如下。forelementinA:
循環(huán)塊代碼執(zhí)行流程圖如圖3-4所示。圖3-4
for循環(huán)流程圖【例3-3】接收一個鍵盤輸入的數(shù)字,計算從1加到該數(shù)字的和。In[5]:n=int(input("請輸入結束的數(shù):"))...:s=0...:foriinrange(n+1):...:s+=i...:print("從1加到%d的結果是:%d"%(n,s))請輸入結束的數(shù):15從1加到15的結果是:120代碼說明:range(n)函數(shù)表示產(chǎn)生一個從0到n-1的n個連續(xù)整數(shù)的一個序列,不包含n。如range(5)表示產(chǎn)生從0到5但不包含5的一個序列:0、1、2、3、4。當然,可以自定義需要的起始點和結束點,如range(2,5)代表從2到5(不包含5),即產(chǎn)生2、3、4。Python中的索引號一般都是左閉右開,即不包含右邊的數(shù)據(jù)。range()函數(shù)還可以定義步長,如用range(1,30,3)可以定義一個從1開始到30結束,步長為3的序列,即:1、4、7、10、13、16、19、22、25、28。range()函數(shù)可以作為一個容器(在Python中,可包含其他對象的對象,稱之為“容器”,容器是一種數(shù)據(jù)結構)存在,當需要將容器中序列轉換為列表時,只需要在其外面包裹一個list()函數(shù)即可;同理,如果要將其轉換為元組時,只需要用tuple()函數(shù)進行轉換。>>>a=range(5)#產(chǎn)生一個范圍是[0,5)的序列>>>list(a)#將a轉化為列表[0,1,2,3,4]>>>tuple(a)#將a轉化為元組(0,1,2,3,4)2.while循環(huán)While循環(huán)不同于for循環(huán),在每次執(zhí)行while時,都會判斷一次其后的條件,當條件為假時,則停止循環(huán)。幾乎所有程序語言中都存在while循環(huán)這種結構,while循環(huán)結構如下。while條件:
代碼塊代碼執(zhí)行流程圖如圖3-5所示。圖3-5
while循環(huán)流程圖下面編寫一個從1加到n的程序來體驗while循環(huán)?!纠?-4】接收一個鍵盤輸入的數(shù)字,計算從1加到該數(shù)字的和。In[6]:n=int(input("請輸入結束的數(shù):"))...:i=1...:s=0...:whilei<=n:...:s+=i...:i+=1...:print("從1加到%d結果是:%d"%(n,s))#%d的作用類似于占位符請輸入結束的數(shù):10從1加到10結果是:55代碼說明:print("從1加到%d結果是:%d"%(n,su))這里是格式化輸出,后面還會講到。%d在這里相當如占位符,類似的還有%s和%f等。%d表示整數(shù)占位,%s表示字符串占位,%f表示浮點數(shù)占位。這里的第一個%d就表示在這個位置上應該顯示的是整數(shù)。同理,第二個%d也表示在這個位置上顯示整數(shù)。而%(n,s)則表示對前面的兩處%占位符的賦值,表示在第一個%d位置上要輸出的是n,第%d位置上輸出的是s!3.break和continuebreak表示結束循環(huán),然后執(zhí)行循環(huán)體之后的語句。continue語句和break語句的用法是相同的,即也可以用于for和while語句,不能用于if。出現(xiàn)的位置也一樣,區(qū)別在于break用于結束循環(huán),而continue用于跳出當前循環(huán),執(zhí)行下一次循環(huán)。
【例3-5】超過三次退出循環(huán)。In[1]:i=0
...:whileTrue:
...:i+=1
...:ifi>3:
...:break
...:print("第%d次"%i)第1次第2次第3次【例3-6】輸出0到4的平方,跳過3。In[2]:foriinrange(5):
...:ifi==3:
...:continue
...:print(i**2)014164.異常
在Python中,try/except語句主要用于捕獲和處理程序正常運行過程中出現(xiàn)的一些異常情況,如語法錯誤、數(shù)據(jù)除零錯誤、從未定義的變量上取值等。除了try/except外,話可以與else、finally的組合來實現(xiàn)更好的穩(wěn)定性和靈活性,其一般格式如下。try:Normalexecutionblockexcept:exceptionhandleelse:ifnoexception,getherefinally:print("finally")無論發(fā)生異常與否,若有finally語句,以上try/except/else代碼塊運行的最后一步總是運行finally所對應的代碼塊。其中,try-except,
這是最簡單的異常處理結構,其結構如下:try:
需要處理的代碼exceptExceptionase:
處理代碼發(fā)生異常,在這里進行異常處理
例如,先來看一下1/0會出現(xiàn)什么情況:>>>1/0Traceback(mostrecentcalllast):File"<ipython-input-11-05c9758a9c21>",line1,in<module>1/0ZeroDivisionError:divisionbyzero報錯!下面繼續(xù)觸發(fā)除以0的異常,然后捕捉并處理。In[1]:try:
...:print(1/0)
...:exceptExceptionase:
...:print('代碼出現(xiàn)除0異常,這里進行處理!')
...:print("這里是e的信息:"%e)
...:print("我還在運行")測試及運行結果如下:代碼出現(xiàn)除0異常,這里進行處理!這里是e的信息:divisionbyzero我還在運行try-except-finally,這種異常處理結構通常用于無論程序是否發(fā)生異常,對必須要執(zhí)行的操作進行運行,例如關閉數(shù)據(jù)庫資源、關閉打開的文件資源等,但必須運行的代碼需要放在finally塊中?!纠?-7】finally在try語塊中的應用。In[7]:try:...:print(1/0)...:exceptExceptionase:...:print("除0異常")...:finally:...:print("必須執(zhí)行")...:print("-----------------")...:...:try:...:print("這里沒有異常")...:exceptExceptionase:...:print("這句話不會輸出")...:finally:...:print("這里是必須執(zhí)行的")除0異常必須執(zhí)行-----------------這里沒有異常這里是必須執(zhí)行的測試及運行結果如下:除0異常必須執(zhí)行-----------------這里沒有異常這里是必須執(zhí)行的try-except-else,該結構運行過程如下:程序進入try部分,當try部分發(fā)生異常則進入except部分,若不發(fā)生異常則進入else部分?!纠?-8】else在try語塊中的應用。In[8]:try:...:print("正常代碼!")...:exceptExceptionase:...:print("將不會輸出這句話")...:else:...:print("這句話將被輸出")...:print("-------------------")In[9]:try:...:print(1/0)...:exceptExceptionase:...:print("進入異常處理")...:else:...:print("不會輸出")正常代碼!這句話將被輸出進入異常處理輸出結果為:再看下面這段代碼。輸出結果為:try-except-else-finally,這是try-except-else的升級版,在原有的基礎上增加了必須要執(zhí)行的部分,示例代碼如下:【例3-9】else和finally同時在try語塊中的應用。In[10]:try:...:print("沒有異常!")...:exceptExceptionase:...:print("不會輸出!")...:else:...:print("進入else")...:finally:...:print("必須輸出!")...:...:print("-------------------")沒有異常!進入else必須輸出!-------------------In[11]:try:...:print(1/0)...:exceptExceptionase:...:print("引發(fā)異常!")...:else:...:print("不會進入else")...:finally:...:print("必須輸出!")引發(fā)異常!必須輸出!注意:1.在上面所示的完整語句中try/except/else/finally所出現(xiàn)的順序必須是try→exceptx→except→else→finally,即所有的except必須在else和finally之前,else(若有)必須在finally之前,而exceptx又必須在except之前。否則會出現(xiàn)語法錯誤。2.對于上面所展示的try/except完整格式而言,else和finally都是可選的,而不是必需的。但若存在else,則必須在finally之前,finally(如果存在)必須在整個語句的最后位置。3.在上面的完整語句中,else語句的存在必須以exceptx或者except語句為前提,如果在沒有except語句而而使用else,會引發(fā)語法錯誤,即有else則必有exceptx或者except語句。異常處理的完整格式如下。try:
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 會展攤位服務合同范例
- 代賣水泥合同范例
- 信訪保安合同范本
- 農(nóng)村蝦塘補償合同范例
- 喬木補充合同范例
- 養(yǎng)殖廠土地租賃合同范例
- 人保勞動合同范例
- 人工草坪安裝合同范例
- 產(chǎn)品外包合同范例
- 住房出租協(xié)議合同范例
- 2025年合肥共達職業(yè)技術學院單招職業(yè)技能測試題庫附答案
- 2025美國急性冠脈綜合征(ACS)患者管理指南解讀課件
- 足球迷互動活動策劃與執(zhí)行策略
- 2025年寧夏工商職業(yè)技術學院單招職業(yè)適應性測試題庫帶答案
- ESC+2024+心房顫動(房顫)管理指南解讀
- 2019地質災害防治工程工程量清單計價規(guī)范
- 三級機動車駕駛教練員職業(yè)資格理論題庫(匯總版)
- 玉米雜交制種基地檔案豐墾種業(yè)(樣本)
- EXCEL函數(shù)公式培訓PPT(共39張)
- A4標簽打印模板
- 矛盾糾紛排查調處記錄表
評論
0/150
提交評論