版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第4章 程序的控制結(jié)構(gòu)程序的循環(huán)結(jié)構(gòu) 根據(jù)循環(huán)執(zhí)行次數(shù)的確定性,分為確定次數(shù)循環(huán)和非確定次數(shù)循環(huán) 確定次數(shù)循環(huán)指循環(huán)體對(duì)循環(huán)次數(shù)有明確的定義,這類(lèi)循環(huán)在Python中被稱(chēng)為“遍歷循環(huán)”,其中,循環(huán)次數(shù)采用遍歷結(jié)構(gòu)中元素個(gè)數(shù)來(lái)體現(xiàn),具體采用for語(yǔ)句實(shí)現(xiàn)。 非確定次數(shù)循環(huán)指程序不確定循環(huán)體可能的執(zhí)行次數(shù),而通過(guò)條件判斷是否繼續(xù)執(zhí)行循環(huán)體,Python提供了根據(jù)判斷條件執(zhí)行程序的無(wú)限循環(huán),具體采用while語(yǔ)句實(shí)現(xiàn)。程序的循環(huán)結(jié)構(gòu) Python通過(guò)保留字for實(shí)現(xiàn)“遍歷循環(huán)”,基本使用方法如下:for in : 之所以稱(chēng)為“遍歷循環(huán)”,是因?yàn)閒or語(yǔ)句的循環(huán)執(zhí)行次數(shù)是根據(jù)遍歷結(jié)構(gòu)中元素個(gè)數(shù)確定的。
2、遍歷循環(huán)可以理解為從遍歷結(jié)構(gòu)中逐一提取元素,放在循環(huán)變量中,對(duì)于每個(gè)所提取的元素執(zhí)行一次語(yǔ)句塊。遍歷循環(huán): for語(yǔ)句 遍歷結(jié)構(gòu)可以是字符串、文件、組合數(shù)據(jù)類(lèi)型或range()函數(shù),常用的使用方式如下循環(huán)N次for i in range(N):遍歷文件fi的每一行for line in fi:遍歷字符串s for c in s:遍歷循環(huán): for語(yǔ)句 遍歷循環(huán)還有一種擴(kuò)展模式,使用方法如下:for in : else: 遍歷循環(huán): for語(yǔ)句 在這種擴(kuò)展模式中,當(dāng)for循環(huán)正常執(zhí)行之后,程序會(huì)繼續(xù)執(zhí)行else語(yǔ)句中內(nèi)容。else語(yǔ)句只在循環(huán)正常執(zhí)行之后才執(zhí)行,因此,可以在中放置判斷循環(huán)執(zhí)行情況
3、的語(yǔ)句。 這里先給一個(gè)小例子:遍歷循環(huán): for語(yǔ)句 很多應(yīng)用很難在執(zhí)行之初就有確定的遍歷結(jié)構(gòu),這需要編程語(yǔ)言提供根據(jù)條件進(jìn)行循環(huán)的語(yǔ)法,稱(chēng)為無(wú)限循環(huán),又稱(chēng)條件循環(huán)。 無(wú)限循環(huán)一直保持循環(huán)操作直到特定條件被滿足才結(jié)束,不需要提前知道循環(huán)次數(shù)。無(wú)限循環(huán): while語(yǔ)句 Python通過(guò)保留字while實(shí)現(xiàn)無(wú)限循環(huán),基本使用方法如下:while : 其中與if語(yǔ)句中的判斷條件一樣,結(jié)果為T(mén)rue和False。無(wú)限循環(huán): while語(yǔ)句 在這種擴(kuò)展模式中,當(dāng)while循環(huán)正常執(zhí)行之后,程序會(huì)繼續(xù)執(zhí)行else語(yǔ)句中內(nèi)容。else語(yǔ)句只在循環(huán)正常執(zhí)行之后才執(zhí)行,因此,可以在中放置判斷循環(huán)執(zhí)行情況的語(yǔ)句
4、,例如:無(wú)限循環(huán): while語(yǔ)句 程序執(zhí)行后的效果如下: 如果通過(guò)while實(shí)現(xiàn)一個(gè)計(jì)數(shù)循環(huán),需要在循環(huán)之前對(duì)計(jì)數(shù)器idx進(jìn)行初始化,并在每次循環(huán)中對(duì)計(jì)數(shù)器idx進(jìn)行累加,如上述代碼第4行。相比f(wàn)or循環(huán),循環(huán)變量逐一取自遍歷結(jié)構(gòu),不需要程序維護(hù)計(jì)數(shù)器無(wú)限循環(huán): while語(yǔ)句 循環(huán)結(jié)構(gòu)有兩個(gè)輔助保留字:break和continue,它們用來(lái)輔助控制循環(huán)執(zhí)行。 break用來(lái)跳出最內(nèi)層for或while循環(huán),脫離該循環(huán)后續(xù)執(zhí)行,例如循環(huán)保留字: break和continue 其中,break語(yǔ)句跳出了最內(nèi)層for循環(huán),但仍然繼續(xù)執(zhí)行外層循環(huán)。每個(gè)break語(yǔ)句只有能力跳出當(dāng)前層次循環(huán)。 co
5、ntinue用來(lái)結(jié)束當(dāng)前當(dāng)次循環(huán),即跳出循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,但不跳出當(dāng)前循環(huán)。對(duì)于while循環(huán),繼續(xù)求解循環(huán)條件。而對(duì)于for循環(huán),程序流程接著遍歷循環(huán)列表。循環(huán)保留字: break和continue 對(duì)比continue和break語(yǔ)句,如下:循環(huán)保留字: break和continue兩個(gè)程序執(zhí)行后的效果分別為 PYHON PYrandom庫(kù)的使用 隨機(jī)數(shù)在計(jì)算機(jī)應(yīng)用中十分常見(jiàn)Python內(nèi)置的random庫(kù)主要用于產(chǎn)生各種分布的偽隨機(jī)數(shù)序列random庫(kù)采用梅森旋轉(zhuǎn)算法(Mersenne twister)生成偽隨機(jī)數(shù)序列,可用于除隨機(jī)性要求更高的加解密算法外的大多數(shù)工程應(yīng)用。ra
6、ndom庫(kù)概述 使用random庫(kù)主要目的是生成隨機(jī)數(shù),因此,讀者只需要查閱該庫(kù)的隨機(jī)數(shù)生成函數(shù),找到符合使用場(chǎng)景的函數(shù)使用即可。這個(gè)庫(kù)提供了不同類(lèi)型的隨機(jī)數(shù)函數(shù),所有函數(shù)都是基于最基本的random.random()函數(shù)擴(kuò)展而來(lái)。random庫(kù)概述random庫(kù)解析 random庫(kù)常用的9個(gè)隨機(jī)數(shù)生成函數(shù)函數(shù)描述函數(shù)seed(a=None)初始化隨機(jī)數(shù)種子,默認(rèn)值為當(dāng)前系統(tǒng)時(shí)間seed(a=None)random()生成一個(gè)0.0, 1.0)之間的隨機(jī)小數(shù)random()randint(a, b)生成一個(gè)a,b之間的整數(shù)randint(a, b)getrandbits(k)生成一個(gè)k比特長(zhǎng)度
7、的隨機(jī)整數(shù)getrandbits(k)randrange(start, stop, step)生成一個(gè)start, stop)之間以step為步數(shù)的隨機(jī)整數(shù)randrange(start, stop, step)uniform(a, b)生成一個(gè)a, b之間的隨機(jī)小數(shù)uniform(a, b)choice(seq)從序列類(lèi)型(例如:列表)中隨機(jī)返回一個(gè)元素choice(seq)shuffle(seq)將序列類(lèi)型中元素隨機(jī)排列,返回打亂后的序列shuffle(seq)sample(pop, k)從pop類(lèi)型中隨機(jī)選取k個(gè)元素,以列表類(lèi)型返回sample(pop, k) 對(duì)random庫(kù)的引用方法
8、與math庫(kù)一樣,可采用下面兩種方式實(shí)現(xiàn)import random 或 from random import * 使用random庫(kù)的一些例子如下,請(qǐng)讀者注意,這些語(yǔ)句每次執(zhí)行后的結(jié)果不一定一樣:random庫(kù)解析random庫(kù)解析 生成隨機(jī)數(shù)之前可以通過(guò)seed()函數(shù)指定隨機(jī)數(shù)種子,隨機(jī)種子一般是一個(gè)整數(shù),只要種子相同,每次生成的隨機(jī)數(shù)序列也相同。這種情況便于測(cè)試和同步數(shù)據(jù),例如:random庫(kù)解析的計(jì)算的計(jì)算 隨著計(jì)算機(jī)的出現(xiàn),數(shù)學(xué)家找到了另類(lèi)求解的方法:蒙特卡羅(Monte Carlo)方法,又稱(chēng)隨機(jī)抽樣或統(tǒng)計(jì)試驗(yàn)方法。 當(dāng)所要求解的問(wèn)題是某種事件出現(xiàn)的概率,或者是某個(gè)隨機(jī)變量的期望值
9、時(shí),它們可以通過(guò)某種“試驗(yàn)”的方法,得到這種事件出現(xiàn)的頻率,或者這個(gè)隨機(jī)變數(shù)的平均值,并用它們作為問(wèn)題的解。這就是蒙特卡羅方法的基本思想。的計(jì)算 應(yīng)用蒙特卡羅方法求解的基本步驟如下:隨機(jī)向單位正方形和圓結(jié)構(gòu),如圖4.10所示,拋灑大量“飛鏢”點(diǎn),計(jì)算每個(gè)點(diǎn)到圓心的距離從而判斷該點(diǎn)在圓內(nèi)或者圓外,用圓內(nèi)的點(diǎn)數(shù)除以總點(diǎn)數(shù)就是/4值的計(jì)算 為了簡(jiǎn)化計(jì)算,一般利用圖形的1/4求解值,如圖4.11所示。該問(wèn)題的IPO表示如下:輸入:拋點(diǎn)數(shù)處理:計(jì)算每個(gè)點(diǎn)到圓心的距離,統(tǒng)計(jì)在圓內(nèi)點(diǎn)的數(shù)量輸出:值的計(jì)算的計(jì)算 上述代碼中,random()函數(shù)隨機(jī)返回一個(gè)在0,1)之間的浮點(diǎn)數(shù),用兩個(gè)隨機(jī)數(shù)給出隨機(jī)拋點(diǎn)(x,
10、y)的坐標(biāo)。sqrt()函數(shù)來(lái)自于數(shù)學(xué)庫(kù)math,用來(lái)求解輸入數(shù)據(jù)的平方根。第一次調(diào)用clock()函數(shù)啟動(dòng)一個(gè)新的計(jì)時(shí)器,第二次調(diào)動(dòng)clock()函數(shù)返回啟動(dòng)計(jì)時(shí)器后的時(shí)間。的計(jì)算 代碼中DARTS是一個(gè)常量,初始設(shè)定這個(gè)拋點(diǎn)數(shù)為1000。該程序運(yùn)行結(jié)果如下:Pi值是3.144.運(yùn)行時(shí)間是: 0.016477s計(jì)算得到的值為3.144,與大家熟知的3.1415相差較遠(yuǎn)。原因是DARTS點(diǎn)數(shù)量較少,無(wú)法更精確刻畫(huà)面積的比例關(guān)系。的計(jì)算 表4.4列出了不同DARTS值情況下該程序的運(yùn)行情況,可以看到,隨著DARTS數(shù)量的增加,在220數(shù)量級(jí)上,的值就相對(duì)準(zhǔn)確了。DARTS運(yùn)行時(shí)間2103.109
11、3750.011s2113.1386710.012s2123.1503900.014s2133.1435540.018s2143.1413570.030s2153.1478270.049s2163.1419670.116s2183.1445770.363s2203255s的計(jì)算異常處理機(jī)制 觀察下面這段小程序num = eval(input(num = eval(input(請(qǐng)輸入一個(gè)整數(shù)請(qǐng)輸入一個(gè)整數(shù): ): )print(numprint(num* * *2 2) )當(dāng)用戶輸入數(shù)字時(shí),程序正常執(zhí)行,如果用戶輸入的不是數(shù)字呢?異常處理: try-except語(yǔ)句異常
12、處理: try-except語(yǔ)句 可以看到,Python解釋器返回了異常信息,同時(shí)程序退出,圖4.12具體說(shuō)明了這個(gè)異常信息中各部分的含義。異常處理: try-except語(yǔ)句 Python異常信息中最重要的部分是異常類(lèi)型,它表明了發(fā)生異常的原因,也是程序處理異常的依據(jù)。 Python使用try-except語(yǔ)句實(shí)現(xiàn)異常處理,基本的語(yǔ)法格式如下:try:except :異常處理: try-except語(yǔ)句 語(yǔ)句塊1是正常執(zhí)行的程序內(nèi)容,當(dāng)發(fā)生異常時(shí)執(zhí)行except保留字后面的語(yǔ)句塊,為這個(gè)小例子增加異常處理,代碼如下: 異常處理: try-except語(yǔ)句 try-except語(yǔ)句可以支持多個(gè)
13、except語(yǔ)句,語(yǔ)法格式如下:try:try: 1except except :1: 2.except except :N: N+1except:except: 異常的高級(jí)用法 其中,第1到第N個(gè)except語(yǔ)句后面都指定了異常類(lèi)型,說(shuō)明這些except所包含的語(yǔ)句塊只處理這些類(lèi)型的異常。最后一個(gè)except語(yǔ)句沒(méi)有指定任何類(lèi)型,表示它對(duì)應(yīng)的語(yǔ)句塊可以處理所有其他異常。這個(gè)過(guò)程與if-elif-else語(yǔ)句類(lèi)似,是分支結(jié)構(gòu)的一種表達(dá)方式,一段代碼如下。異常的高級(jí)用法異常的高級(jí)用法 該程序?qū)⒂脩糨斎氲臄?shù)字作為索引從字符串a(chǎn)lp中返回一個(gè)字符,當(dāng)用戶輸入非整數(shù)字符時(shí),except NameErr
14、or異常被捕獲到,提升用戶輸入類(lèi)型錯(cuò)誤,當(dāng)用戶輸入數(shù)字不在1到26之間時(shí),異常被except捕獲,程序打印其他錯(cuò)誤信息,執(zhí)行過(guò)程和結(jié)果如下:異常的高級(jí)用法 除了try和except保留字外,異常語(yǔ)句還可以與else和finally保留字配合使用,語(yǔ)法格式如下:try:try: 1except except :1: 2else:else: 3finally:finally: 異常的高級(jí)用法 此處的else語(yǔ)句與for循環(huán)和while循環(huán)中的else一樣,當(dāng)try中語(yǔ)句塊1正常執(zhí)行結(jié)束且沒(méi)有發(fā)生異常時(shí),else中語(yǔ)句塊3執(zhí)行,可以看作是對(duì)try語(yǔ)句塊正常執(zhí)行后的一種追加處理。 finally語(yǔ)句塊
15、則不同,無(wú)論try中語(yǔ)句塊1是否發(fā)生異常,語(yǔ)句塊4都會(huì)執(zhí)行,可以將程序執(zhí)行語(yǔ)句塊1的一些收尾工作放在這里,例如關(guān)閉打開(kāi)文件等。異常的高級(jí)用法 采用這些保留子的異常處理控制流過(guò)程如圖4.13所示異常的高級(jí)用法 采用else和finally修改代碼如下異常的高級(jí)用法 執(zhí)行過(guò)程和結(jié)果如下:異常的高級(jí)用法 Python能識(shí)別很多種異常類(lèi)型,但不建議讀者編寫(xiě)程序時(shí)依賴(lài)try-except這種異常處理機(jī)制。try-except異常一般只用來(lái)檢測(cè)極少發(fā)生的情況,例如:用戶輸入的合規(guī)性或文件打開(kāi)是否成功等。對(duì)于本節(jié)小例子中索引字符串超過(guò)范圍的情況應(yīng)該盡量在程序中采用if語(yǔ)句直接判斷,盡量避免通過(guò)異常處理來(lái)應(yīng)對(duì)這種可能發(fā)生的“錯(cuò)誤”異常的高級(jí)用法 對(duì)于商業(yè)應(yīng)用的軟件產(chǎn)品,穩(wěn)定性和可靠性是最重要的衡量指標(biāo)之一。即使這類(lèi)軟件產(chǎn)品,也不會(huì)濫用try-except類(lèi)型語(yǔ)句。因?yàn)椴?/p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 威視行業(yè)測(cè)繪培訓(xùn)
- 《淘寶營(yíng)銷(xiāo)活動(dòng)技巧》課件
- 《房地產(chǎn)人職業(yè)規(guī)劃》課件
- 《課件視覺(jué)設(shè)計(jì)》課件
- 2024年四川省德陽(yáng)市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2023年陜西省漢中市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年甘肅省平?jīng)鍪泄_(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年黑龍江省鶴崗市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年遼寧省沈陽(yáng)市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2022年黑龍江省大興安嶺地區(qū)公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- WordA4信紙(A4橫條直接打印版)
- 藥品庫(kù)存清單(2015年)
- (完整版)會(huì)計(jì)準(zhǔn)則(全文)
- 百家姓全文拼音版A4打印
- 專(zhuān)家論證挖孔樁專(zhuān)項(xiàng)施工方案
- IPC標(biāo)準(zhǔn)解析學(xué)習(xí)課程
- 麻花鉆鉆孔中常見(jiàn)問(wèn)題的原因和解決辦法
- 部分常用巖土經(jīng)驗(yàn)值
- 薩克斯曲譜回家
- 外墻真石漆購(gòu)銷(xiāo)合同
- 藝體教研組活動(dòng)記錄
評(píng)論
0/150
提交評(píng)論