Python電子教案4-2 程序的控制結構_第1頁
Python電子教案4-2 程序的控制結構_第2頁
Python電子教案4-2 程序的控制結構_第3頁
Python電子教案4-2 程序的控制結構_第4頁
Python電子教案4-2 程序的控制結構_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第4章 程序的控制結構程序的循環(huán)結構 根據循環(huán)執(zhí)行次數(shù)的確定性,分為確定次數(shù)循環(huán)和非確定次數(shù)循環(huán) 確定次數(shù)循環(huán)指循環(huán)體對循環(huán)次數(shù)有明確的定義,這類循環(huán)在Python中被稱為“遍歷循環(huán)”,其中,循環(huán)次數(shù)采用遍歷結構中元素個數(shù)來體現(xiàn),具體采用for語句實現(xiàn)。 非確定次數(shù)循環(huán)指程序不確定循環(huán)體可能的執(zhí)行次數(shù),而通過條件判斷是否繼續(xù)執(zhí)行循環(huán)體,Python提供了根據判斷條件執(zhí)行程序的無限循環(huán),具體采用while語句實現(xiàn)。程序的循環(huán)結構 Python通過保留字for實現(xiàn)“遍歷循環(huán)”,基本使用方法如下:for in : 之所以稱為“遍歷循環(huán)”,是因為for語句的循環(huán)執(zhí)行次數(shù)是根據遍歷結構中元素個數(shù)確定的。

2、遍歷循環(huán)可以理解為從遍歷結構中逐一提取元素,放在循環(huán)變量中,對于每個所提取的元素執(zhí)行一次語句塊。遍歷循環(huán): for語句 遍歷結構可以是字符串、文件、組合數(shù)據類型或range()函數(shù),常用的使用方式如下循環(huán)N次for i in range(N):遍歷文件fi的每一行for line in fi:遍歷字符串s for c in s:遍歷循環(huán): for語句 遍歷循環(huán)還有一種擴展模式,使用方法如下:for in : else: 遍歷循環(huán): for語句 在這種擴展模式中,當for循環(huán)正常執(zhí)行之后,程序會繼續(xù)執(zhí)行else語句中內容。else語句只在循環(huán)正常執(zhí)行之后才執(zhí)行,因此,可以在中放置判斷循環(huán)執(zhí)行情況

3、的語句。 這里先給一個小例子:遍歷循環(huán): for語句 很多應用很難在執(zhí)行之初就有確定的遍歷結構,這需要編程語言提供根據條件進行循環(huán)的語法,稱為無限循環(huán),又稱條件循環(huán)。 無限循環(huán)一直保持循環(huán)操作直到特定條件被滿足才結束,不需要提前知道循環(huán)次數(shù)。無限循環(huán): while語句 Python通過保留字while實現(xiàn)無限循環(huán),基本使用方法如下:while : 其中與if語句中的判斷條件一樣,結果為True和False。無限循環(huán): while語句 在這種擴展模式中,當while循環(huán)正常執(zhí)行之后,程序會繼續(xù)執(zhí)行else語句中內容。else語句只在循環(huán)正常執(zhí)行之后才執(zhí)行,因此,可以在中放置判斷循環(huán)執(zhí)行情況的語句

4、,例如:無限循環(huán): while語句 程序執(zhí)行后的效果如下: 如果通過while實現(xiàn)一個計數(shù)循環(huán),需要在循環(huán)之前對計數(shù)器idx進行初始化,并在每次循環(huán)中對計數(shù)器idx進行累加,如上述代碼第4行。相比for循環(huán),循環(huán)變量逐一取自遍歷結構,不需要程序維護計數(shù)器無限循環(huán): while語句 循環(huán)結構有兩個輔助保留字:break和continue,它們用來輔助控制循環(huán)執(zhí)行。 break用來跳出最內層for或while循環(huán),脫離該循環(huán)后續(xù)執(zhí)行,例如循環(huán)保留字: break和continue 其中,break語句跳出了最內層for循環(huán),但仍然繼續(xù)執(zhí)行外層循環(huán)。每個break語句只有能力跳出當前層次循環(huán)。 co

5、ntinue用來結束當前當次循環(huán),即跳出循環(huán)體中下面尚未執(zhí)行的語句,但不跳出當前循環(huán)。對于while循環(huán),繼續(xù)求解循環(huán)條件。而對于for循環(huán),程序流程接著遍歷循環(huán)列表。循環(huán)保留字: break和continue 對比continue和break語句,如下:循環(huán)保留字: break和continue兩個程序執(zhí)行后的效果分別為 PYHON PYrandom庫的使用 隨機數(shù)在計算機應用中十分常見Python內置的random庫主要用于產生各種分布的偽隨機數(shù)序列random庫采用梅森旋轉算法(Mersenne twister)生成偽隨機數(shù)序列,可用于除隨機性要求更高的加解密算法外的大多數(shù)工程應用。ra

6、ndom庫概述 使用random庫主要目的是生成隨機數(shù),因此,讀者只需要查閱該庫的隨機數(shù)生成函數(shù),找到符合使用場景的函數(shù)使用即可。這個庫提供了不同類型的隨機數(shù)函數(shù),所有函數(shù)都是基于最基本的random.random()函數(shù)擴展而來。random庫概述random庫解析 random庫常用的9個隨機數(shù)生成函數(shù)函數(shù)描述函數(shù)seed(a=None)初始化隨機數(shù)種子,默認值為當前系統(tǒng)時間seed(a=None)random()生成一個0.0, 1.0)之間的隨機小數(shù)random()randint(a, b)生成一個a,b之間的整數(shù)randint(a, b)getrandbits(k)生成一個k比特長度

7、的隨機整數(shù)getrandbits(k)randrange(start, stop, step)生成一個start, stop)之間以step為步數(shù)的隨機整數(shù)randrange(start, stop, step)uniform(a, b)生成一個a, b之間的隨機小數(shù)uniform(a, b)choice(seq)從序列類型(例如:列表)中隨機返回一個元素choice(seq)shuffle(seq)將序列類型中元素隨機排列,返回打亂后的序列shuffle(seq)sample(pop, k)從pop類型中隨機選取k個元素,以列表類型返回sample(pop, k) 對random庫的引用方法

8、與math庫一樣,可采用下面兩種方式實現(xiàn)import random 或 from random import * 使用random庫的一些例子如下,請讀者注意,這些語句每次執(zhí)行后的結果不一定一樣:random庫解析random庫解析 生成隨機數(shù)之前可以通過seed()函數(shù)指定隨機數(shù)種子,隨機種子一般是一個整數(shù),只要種子相同,每次生成的隨機數(shù)序列也相同。這種情況便于測試和同步數(shù)據,例如:random庫解析的計算的計算 隨著計算機的出現(xiàn),數(shù)學家找到了另類求解的方法:蒙特卡羅(Monte Carlo)方法,又稱隨機抽樣或統(tǒng)計試驗方法。 當所要求解的問題是某種事件出現(xiàn)的概率,或者是某個隨機變量的期望值

9、時,它們可以通過某種“試驗”的方法,得到這種事件出現(xiàn)的頻率,或者這個隨機變數(shù)的平均值,并用它們作為問題的解。這就是蒙特卡羅方法的基本思想。的計算 應用蒙特卡羅方法求解的基本步驟如下:隨機向單位正方形和圓結構,如圖4.10所示,拋灑大量“飛鏢”點,計算每個點到圓心的距離從而判斷該點在圓內或者圓外,用圓內的點數(shù)除以總點數(shù)就是/4值的計算 為了簡化計算,一般利用圖形的1/4求解值,如圖4.11所示。該問題的IPO表示如下:輸入:拋點數(shù)處理:計算每個點到圓心的距離,統(tǒng)計在圓內點的數(shù)量輸出:值的計算的計算 上述代碼中,random()函數(shù)隨機返回一個在0,1)之間的浮點數(shù),用兩個隨機數(shù)給出隨機拋點(x,

10、y)的坐標。sqrt()函數(shù)來自于數(shù)學庫math,用來求解輸入數(shù)據的平方根。第一次調用clock()函數(shù)啟動一個新的計時器,第二次調動clock()函數(shù)返回啟動計時器后的時間。的計算 代碼中DARTS是一個常量,初始設定這個拋點數(shù)為1000。該程序運行結果如下:Pi值是3.144.運行時間是: 0.016477s計算得到的值為3.144,與大家熟知的3.1415相差較遠。原因是DARTS點數(shù)量較少,無法更精確刻畫面積的比例關系。的計算 表4.4列出了不同DARTS值情況下該程序的運行情況,可以看到,隨著DARTS數(shù)量的增加,在220數(shù)量級上,的值就相對準確了。DARTS運行時間2103.109

11、3750.011s2113.1386710.012s2123.1503900.014s2133.1435540.018s2143.1413570.030s2153.1478270.049s2163.1419670.116s2183.1445770.363s2203255s的計算異常處理機制 觀察下面這段小程序num = eval(input(num = eval(input(請輸入一個整數(shù)請輸入一個整數(shù): ): )print(numprint(num* * *2 2) )當用戶輸入數(shù)字時,程序正常執(zhí)行,如果用戶輸入的不是數(shù)字呢?異常處理: try-except語句異常

12、處理: try-except語句 可以看到,Python解釋器返回了異常信息,同時程序退出,圖4.12具體說明了這個異常信息中各部分的含義。異常處理: try-except語句 Python異常信息中最重要的部分是異常類型,它表明了發(fā)生異常的原因,也是程序處理異常的依據。 Python使用try-except語句實現(xiàn)異常處理,基本的語法格式如下:try:except :異常處理: try-except語句 語句塊1是正常執(zhí)行的程序內容,當發(fā)生異常時執(zhí)行except保留字后面的語句塊,為這個小例子增加異常處理,代碼如下: 異常處理: try-except語句 try-except語句可以支持多個

13、except語句,語法格式如下:try:try: 1except except :1: 2.except except :N: N+1except:except: 異常的高級用法 其中,第1到第N個except語句后面都指定了異常類型,說明這些except所包含的語句塊只處理這些類型的異常。最后一個except語句沒有指定任何類型,表示它對應的語句塊可以處理所有其他異常。這個過程與if-elif-else語句類似,是分支結構的一種表達方式,一段代碼如下。異常的高級用法異常的高級用法 該程序將用戶輸入的數(shù)字作為索引從字符串alp中返回一個字符,當用戶輸入非整數(shù)字符時,except NameErr

14、or異常被捕獲到,提升用戶輸入類型錯誤,當用戶輸入數(shù)字不在1到26之間時,異常被except捕獲,程序打印其他錯誤信息,執(zhí)行過程和結果如下:異常的高級用法 除了try和except保留字外,異常語句還可以與else和finally保留字配合使用,語法格式如下:try:try: 1except except :1: 2else:else: 3finally:finally: 異常的高級用法 此處的else語句與for循環(huán)和while循環(huán)中的else一樣,當try中語句塊1正常執(zhí)行結束且沒有發(fā)生異常時,else中語句塊3執(zhí)行,可以看作是對try語句塊正常執(zhí)行后的一種追加處理。 finally語句塊

15、則不同,無論try中語句塊1是否發(fā)生異常,語句塊4都會執(zhí)行,可以將程序執(zhí)行語句塊1的一些收尾工作放在這里,例如關閉打開文件等。異常的高級用法 采用這些保留子的異常處理控制流過程如圖4.13所示異常的高級用法 采用else和finally修改代碼如下異常的高級用法 執(zhí)行過程和結果如下:異常的高級用法 Python能識別很多種異常類型,但不建議讀者編寫程序時依賴try-except這種異常處理機制。try-except異常一般只用來檢測極少發(fā)生的情況,例如:用戶輸入的合規(guī)性或文件打開是否成功等。對于本節(jié)小例子中索引字符串超過范圍的情況應該盡量在程序中采用if語句直接判斷,盡量避免通過異常處理來應對這種可能發(fā)生的“錯誤”異常的高級用法 對于商業(yè)應用的軟件產品,穩(wěn)定性和可靠性是最重要的衡量指標之一。即使這類軟件產品,也不會濫用try-except類型語句。因為采

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論