Python語言程序的設(shè)計(jì)3_第1頁
Python語言程序的設(shè)計(jì)3_第2頁
Python語言程序的設(shè)計(jì)3_第3頁
Python語言程序的設(shè)計(jì)3_第4頁
Python語言程序的設(shè)計(jì)3_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.第三周 分支與循環(huán)3.1 程序基本結(jié)構(gòu)1. 程序流程圖 用規(guī)定的一系列圖形 、流程線和文字說明 算法中的基本操作和控制流程 。流程圖的基本元素包括:( 1)表示相應(yīng)操作的框( 2)帶箭頭的流程線( 3)框內(nèi)外必要的文字說明2. 設(shè)計(jì)程序框圖的步驟 :( 1)用自然語言 表述算法步驟( 2)確定步驟邏輯結(jié)構(gòu) ,用相應(yīng)框圖表示( 3)流程線連接框圖 ,加上終端框 ,得到整個(gè)算法的程序框圖3. 任何算法都可以由順序、選擇、循環(huán)三種基本結(jié)構(gòu)組合實(shí)現(xiàn):.專業(yè)專注.( 1)順序結(jié)構(gòu) :按邏輯順序自上而下依次運(yùn)行的結(jié)構(gòu) ,如:溫度轉(zhuǎn)換程序;.專業(yè)專注.(2)選擇結(jié)構(gòu) (分支結(jié)構(gòu) ):在算法中通過對條件的判

2、斷 ,根據(jù)條件是否成立而選擇不同流向的算法結(jié)構(gòu) ;(3)循環(huán)結(jié)構(gòu) :指在一定條件下反復(fù)執(zhí)行某部分代碼的操作;3.2 簡單分支例:PM2.5 指數(shù)分級程序功能IPO 模式描述 :輸入:接受外部輸入PM2.5 值處理:空氣質(zhì)量分級算法輸出:打印空氣質(zhì)量提醒PM2.5 指數(shù)分級偽代碼If PM2.5 值> 75打印空氣污染警告If PM2.5 值< 35打印空氣質(zhì)量優(yōu) ,建議戶外運(yùn)動流程圖如圖所示 :.專業(yè)專注.程序 5:pythonview plaincopy1. #pm25.py2. # 空氣質(zhì)量提醒3.4. def main():5.PM = eval(input("Wh

3、at is today'sPM2.5? ")6. # 打印相應(yīng)提醒7. if PM > 75:8. print ( "Unhealthy. Becareful!" )9. if PM < 35:10. print ( "Good. Go running!" )11. main()【運(yùn)行結(jié)果 】輸出:輸入:What is today'sPM2.5?90Unhealthy. Becareful!(1)If 語句格式 :If <condition>:<body>【注】<condition>

4、;是條件表達(dá)式 ,<body> 是一個(gè)或多個(gè)語句序列.專業(yè)專注.先判斷 <condition>條件,若 true ,則執(zhí)行 <body> ,再轉(zhuǎn)向下一條語句;若 false,則直接跳過 <body> ,轉(zhuǎn)向下一條語句(2)簡單條件構(gòu)造 簡單條件基本形式<expr><relop> <expr> <relop> 是關(guān)系操作符 <, <=, =, >=, >, != 使用“= ”表示賦值語句 ,使用 “= ”表示等于 除數(shù)字外 ,字符或字符串也可以按照字典順序用于條件比較 <

5、condition> 是布爾表達(dá)式 ,為 bool 類型布爾值的真假以 True 和 False 表示( 3)二分支語法結(jié)構(gòu)If <condition>:<statements>else:<statements>.專業(yè)專注.程序 6:pythonview plaincopy1. # quadratic.py2. # 計(jì)算二次方程的實(shí)數(shù)根程序3. import math4. def main():5.print ("Thisprogram finds the real solutions to a quadraticn")6.a,b,

6、c =eval(input( "Please enter the coefficients(a,b,c): ")7. delta = b*b -4*a*c8. if delta >= 0:9. discRoot =math.sqrt(delta)10. root1 = (-b +discRoot) / (2*a)11. root2 = (-b -discRoot) / (2*a)12.print ("nThe solutions are:", root1, root2)13. else :14.print ( "Theequation h

7、as no real roots!")15.main()【運(yùn)行結(jié)果 】輸出:This program finds the real solutions to a quadratic輸入:Please enter the coefficients(a,b,c):1,2,3The equation has no real roots!3.3 多分支(1)多分支決策要解決雙根問題 ,就需要對 delta 等于 0 的情況進(jìn)行處理 。語句的結(jié)構(gòu)上要引入嵌套結(jié)構(gòu): 當(dāng) delta < 0 ,處理無實(shí)根情況.專業(yè)專注. 當(dāng) delta = 0 ,處理實(shí)根情況 當(dāng) delta > 0

8、,處理雙根情況一種方案是在程序中使用兩個(gè)if-else 語句 。把一個(gè)復(fù)合語句放到另一個(gè)語句的結(jié)構(gòu)之中稱為嵌套。1. 多分支決策是解決復(fù)雜問題的重要手段之一2. 一個(gè)三分之決策可以由兩個(gè)二分支結(jié)構(gòu)嵌套實(shí)現(xiàn)3. 使用 if-else 描述多分支決策時(shí) ,實(shí)現(xiàn)更多分支需要更多嵌套,影響程序易讀性Python使用 if-elif-else描述多分支決策 ,簡化分支結(jié)構(gòu)的嵌套問題。格式如下 :If <condition1>:<case1 statements>elif<condition2>:<case2 statements>elif<condi

9、tion3>:<case3 statements>else:<default statements>例:程序 7:pythonview plaincopy1. # quadratic.py2. import math.專業(yè)專注.3. def main():4.print ("This program finds the realsolutions to a quadraticn")5.a,b,c =eval(input("Please enter the coefficients(a,b,c): ")6.delta = b*

10、b - 4*a*c7.if a = 0:8.x = -b/c9.print("nThere is ansolution", x)10. elif delta < 0:11.print ("nThe equation has no real roots!")12. elif dalta = 0:13. x = -b/(2*a)14.print ("nTheere is a double rootat", x)15. else :16.discRoot = math.sqrt(delta)17. root1 = (-b +discR

11、oot) / (2*a)18. root2 = (-b -discRoot) / (2*a)19. print ( "nThesolutions are:" , root1, root2)20. main()3.4 異常處理異常處理語句python使用 tryexcept ,可使程序不因運(yùn)行錯(cuò)誤而崩潰.專業(yè)專注.Python 的異常處理語句還可以使用else 和 finally 關(guān)鍵字(可選項(xiàng),若使用則 else 必須在 finally 之前)格式如下 :try:<body>except<ErrorType1>:<handler1>exc

12、ept<ErrorType2>:<handler2>except:<handler0>else:<process_else>finally:<process_finally>tryexcept 可以捕捉任何類型的錯(cuò)誤對于二次方程 ,還會有其他可能的錯(cuò)誤如:輸入非數(shù)值類型 (NameError )輸入無效的表達(dá)式 (SyntaxError )等.專業(yè)專注.此時(shí)可以用一個(gè)try 語句配多個(gè) except 來實(shí)現(xiàn)程序 8:pythonview plaincopy1. # 異常處理測試2. def main():3. try :4. numb

13、er1,number2 = eval(input("Enter two numbers,5. separated by a comma:")6. result = number1/number27. exceptZeroDivisionError:8. print ("Division by zero!" )9. exceptSyntaxError:10.print ( "Acomma may be missing in the input")11. else :12.print ( "Noexceptions, the r

14、esult is", result)13. finally :14.print ("executing the final clause")15.main()【運(yùn)行結(jié)果 】輸出:輸入:Enter two numbers, separated by a comma: 1 2A comma may be missing in the inputexecuting the final clauseEnter two numbers, separated by a comma: 3,2No exceptions, the result is 1.5executing th

15、e final clause.專業(yè)專注.Enter two numbers, separated by a comma: 3,0Division by zero!executing the final clause? 【實(shí)例】三者最大值? 【IPO】輸入:三個(gè)數(shù)值處理:三者最大算法輸出:打印最大值? 【算法比較 】 通盤比較 將每一個(gè)值與其他所有值比較以確定最大值三個(gè)值的情況比較簡單,如果是五值比較復(fù)雜,而且效率低(因?yàn)楸磉_(dá)式?jīng)]有被充分利用) 決策樹 避免冗余比較.專業(yè)專注.結(jié)構(gòu)更加復(fù)雜 ! 順序處理 逐個(gè)掃描每個(gè)值 ,保留最大者【程序】程序 9:# program: maxn.py# 尋找一

16、組數(shù)中的最大值def main ():n = eval(input( "Howmanynumbersare there?" )# 將第一個(gè)值賦值給 maxmax = eval(input( "Enter a number>>" )# 連續(xù)與后面 n-1 值進(jìn)行比較.專業(yè)專注.for i in range(n- 1):x = eval(input( "Enter a number>>" )if x > max:max = xprint( "The largestvalue is", ma

17、x)main()?1?2?3?4?5?6?7?8?9?10?11?12?13.專業(yè)專注.?1?2?3?4?5?6?7?8?9?10?11?12?13【運(yùn)行結(jié)果 】How many numbers are there? 5Enter a number >> 9Enter a number >> 6Enter a number >> 3Enter a number >> 10Enter a number >> 20The largest value is 20.專業(yè)專注. 使用 Python內(nèi)置函數(shù) max()3.5 基本循環(huán)結(jié)構(gòu)( 1)

18、for 循環(huán)Python 可以使用 for 語句循環(huán)遍歷整個(gè)序列的值,格式如下 :for <var>in < sequence >:< body >?1?2?1?2在 for 循環(huán)中,循環(huán)變量 var 遍歷了隊(duì)列中的每一個(gè)值 ,循環(huán)變量 var 遍歷了隊(duì)列中的每一個(gè)值 ,循環(huán)語句體為每個(gè)值執(zhí)行一次例:for 循環(huán)求平均數(shù)? IPO:輸入:待輸入數(shù)字個(gè)數(shù) ,數(shù)字.專業(yè)專注.處理:平均數(shù)算法輸出:平均數(shù)通用設(shè)計(jì)方案 :o 輸入數(shù)字的個(gè)數(shù) no 將 sum 初始化為 0o 循環(huán) n 次:? 輸入數(shù)字 x? 將 x 加入 sum 中o 將 sum/n 作為平均數(shù)輸出

19、出來? 程序 10:#average1.pyn =eval(input( "Howmanynumbers?" )sum=0.0for iinrange(n):x =eval(input( "Enter anumber >>" )sum = sum + xprint( "nThe averageis", sum/n).專業(yè)專注.?1?2?3?4?5?6?7?1?2?3?4?5?6?7【運(yùn)行結(jié)果 】How many numbers? 3Enter a number >> 5Enter a number >&g

20、t; 7Enter a number >> 6The average is 6.0.專業(yè)專注.for 循環(huán)的缺點(diǎn) :程序開始時(shí)必須提供輸入數(shù)字總數(shù),以提供固定循環(huán)次數(shù)大規(guī)模數(shù)字則需要用戶數(shù)清楚個(gè)數(shù)為此,python提供了另一種循環(huán)模式即無限循環(huán),不需要提前知道循環(huán)次數(shù)( 2)while 循環(huán)語句格式 :while< condition >< body >?1?2?1?2條件總是在循環(huán)體執(zhí)行之前被判斷,這種結(jié)構(gòu)又被稱為前測循環(huán)(當(dāng)型循環(huán) )如果循環(huán)體沒有對i 初始化或循環(huán)體沒有累加,條件判斷一直為真,循環(huán)體將一直執(zhí)行,即為死循環(huán)程序 ,這時(shí)通常使用Ctrl+C

21、 來終止一個(gè)程序(3)break 語句 退出循環(huán)例:程序 11:.專業(yè)專注.#TestBreak.pysum = 0number= 0whilenumber< 20:number+=1sum +=numberif sum > 100:breakprint( "The numberis" , number)print( "The sum is", sum)?1?2?3?4?5?6?7.專業(yè)專注.?8?9?10?1?2?3?4?5?6?7?8?9?10【運(yùn)行結(jié)果 】The number is 14The sum is 105( 4)continu

22、e 結(jié)束本次循環(huán)即跳出循環(huán)體中下面尚未執(zhí)行的語句,對于 while 循環(huán),繼續(xù)求解循環(huán)條件;對于for 循環(huán),繼續(xù)遍歷循環(huán)列表.專業(yè)專注.continue語句和 break 語句的區(qū)別 :continue 語句只結(jié)束本次循環(huán),而不終止整個(gè)循環(huán)的執(zhí)行,而 break 語句則是直接結(jié)束整個(gè)循環(huán)流程 ,不再判斷循環(huán)條件是否成立( 5)循環(huán)語句中的 else 不滿足循環(huán)條件時(shí)執(zhí)行3.6 通用循環(huán)構(gòu)造方法(1)交互式循環(huán)交互式循環(huán)是無限循環(huán)的一種,允許用戶通過交互的方式重復(fù)程序特定部分(2)哨兵循環(huán)執(zhí)行循環(huán)直到遇到特定的值,循環(huán)語句才終止執(zhí)行設(shè)計(jì)方法 : 設(shè)定一個(gè)哨兵值作為循環(huán)終止的標(biāo)志 任何值都可以做

23、哨兵,但要與實(shí)際數(shù)據(jù)有所區(qū)別.專業(yè)專注.(3)文件循環(huán)面向文件的方法是數(shù)據(jù)處理的典型應(yīng)用,可以事先將數(shù)據(jù)錄入到文件,便于編輯修改,python中采用 readline() 方法中的 end of file循環(huán)模式(4)循環(huán)嵌套決策和循環(huán)互相嵌套可以實(shí)現(xiàn)復(fù)雜算法,假設(shè)數(shù)字以逗號分隔出現(xiàn)在文件的同一行上( 3)( 4)整合程序如圖 :3.7 死循環(huán)和循環(huán)嵌套.專業(yè)專注.( 1)死循環(huán) 無法靠自身的控制中止的循環(huán)死循環(huán)的使用 :通過死循環(huán)可以一直檢測捕捉特定異常(2)后測循環(huán) (直到型循環(huán) )先接受輸入 ,再判斷循環(huán)條件是否滿足。在 Python 中沒有后測循環(huán)語句,但可以通過 while 和 br

24、eak 語句間接實(shí)現(xiàn) ,如:.專業(yè)專注.( 3)半路循環(huán) 循環(huán)判斷條件在循環(huán)體的中部例:3.8 布爾表達(dá)式條件語句和循環(huán)語句都使用布爾表達(dá)式作為條件布爾值為真 (True )或假( Flase)( 1)布爾操作符 :and ,or , notand 和 or 用于組合兩個(gè)布爾表達(dá)式,并產(chǎn)生一個(gè)布爾結(jié)果< expr > and < expr >< expr > or < expr >?1?2?1?2.專業(yè)專注.not 運(yùn)算符計(jì)算一個(gè)布爾表達(dá)式的反值not<expr>?1?1( 2)布爾操作符的優(yōu)先級 :not > and > or例:壁球比賽計(jì)分 :? 假設(shè)

溫馨提示

  • 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

提交評論