python程序的控制結構-課件_第1頁
python程序的控制結構-課件_第2頁
python程序的控制結構-課件_第3頁
python程序的控制結構-課件_第4頁
python程序的控制結構-課件_第5頁
已閱讀5頁,還剩123頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Python語言程序設計Python語言程序設計第4章

程序的控制結構第4章程序的控制結構程序的基本結構程序的基本結構程序的流程圖程序流程圖用一系列圖形、流程線和文字說明描述程序的基本操作和控制流程,它是程序分析和過程描述的最基本方式。流程圖的基本元素包括7種程序的流程圖程序流程圖用一系列圖形、流程線和文字說明描述程序程序的流程圖程序流程圖示例:由連接點A連接的一個程序

程序的流程圖程序流程圖示例:由連接點A連接的一個程序程序的基本結構順序結構是程序的基礎,但單一的順序結構不可能解決所有問題。程序由三種基本結構組成:順序結構分支結構循環(huán)結構這些基本結構都有一個入口和一個出口。任何程序都由這三種基本結構組合而成程序的基本結構順序結構是程序的基礎,但單一的順序結構不可能解程序的基本結構順序結構是程序按照線性順序依次執(zhí)行的一種運行方式,其中語句塊1S1和語句塊S2表示一個或一組順序執(zhí)行的語句程序的基本結構順序結構是程序按照線性順序依次執(zhí)行的一種運行方程序的基本結構分支結構是程序根據(jù)條件判斷結果而選擇不同向前執(zhí)行路徑的一種運行方式,包括單分支結構和二分支結構。由二分支結構會組合形成多分支結構程序的基本結構分支結構是程序根據(jù)條件判斷結果而選擇不同向前執(zhí)程序的基本結構循環(huán)結構是程序根據(jù)條件判斷結果向后反復執(zhí)行的一種運行方式,根據(jù)循環(huán)體觸發(fā)條件不同,包括條件循環(huán)和遍歷循環(huán)結構程序的基本結構循環(huán)結構是程序根據(jù)條件判斷結果向后反復執(zhí)行的一程序的基本結構實例對于一個計算問題,可以用IPO描述、流程圖描述或者直接以Python代碼方式描述微實例4.1:圓面積和周長的計算。輸入:圓半徑R處理:圓面積:S=π*R*R圓周長:L=2*π*R輸出:圓面積S、周長L

1234R=eval(input("請輸入圓半徑:"))S=3.1415*R*RL=2*3.1415*Rprint("面積和周長:",S,L)問題IPO描述

Python代碼描述

程序的基本結構實例對于一個計算問題,可以用IPO描述、流程圖程序的基本結構實例微實例4.2:實數(shù)絕對值的計算。1234R=eval(input("輸入實數(shù):"))if(R<0):R=-Rprint("絕對值",R)(a)問題IPO描述

(b)流程圖描述

(c)Python代碼描述

程序的基本結構實例微實例4.2:實數(shù)絕對值的計算。1R=程序的基本結構實例微實例4.3:整數(shù)累加。輸入:正整數(shù)R處理:S=1+2+3+…+R輸出:輸出S123456R=eval(input("請輸入正整數(shù):"))i,S=0,0while(i<=R):S=S+ii=i+1print("累加求和",S)(a)問題IPO描述

(b)流程圖描述

(c)Python代碼描述

程序的基本結構實例微實例4.3:整數(shù)累加。輸入:正整數(shù)R1R程序的基本結構實例IPO描述主要用于區(qū)分程序的輸入輸出關系,重點在于結構劃分,算法主要采用自然語言描述流程圖描述側重于描述算法的具體流程關系,流程圖的結構化關系相比自然語言描述更進一步,有助于闡述算法的具體操作過程Python代碼描述是最終的程序產出,最為細致。程序的基本結構實例IPO描述主要用于區(qū)分程序的輸入輸出關系,程序的分支結構程序的分支結構單分支結構:if語句Python中if語句的語法格式如下:if<條件>:語句塊

語句塊是if條件滿足后執(zhí)行的一個或多個語句序列

語句塊中語句通過與if所在行形成縮進表達包含關系if語句首先評估<條件>的結果值,如果結果為True,則執(zhí)行語句塊里的語句序列,然后控制轉向程序的下一條語句。如果結果為False,語句塊里的語句會被跳過。單分支結構:if語句Python中if語句的語法格式如下:布爾類型(bool)TrueFlasebool函數(shù):bool(2)>>>A=1>2>>>type(A)數(shù)字非零為True字符串為True,空字符串為False

布爾類型(bool)True關系運算符if語中<條件>部分可以使用任何能夠產生True或False的語句形成判斷條件最常見的方式是采用關系操作符Python語言共有6個關系操作符操作符數(shù)學符號操作符含義<

<

小于<=≤小于等于>=≥大于等于>

>

大于===等于!=不等于關系運算符if語中<條件>部分可以使用任何能夠產生True或邏輯操作符(notandor)

優(yōu)先級是not>and>or邏輯操作符and和or也稱作短路操作符(short-circuitlogic):它們的參數(shù)從左向右解析,一旦結果可以確定就停止。例如,如果A和C為真而B為假,AandBandC不會解析C

3and4,4and33or4(3),4or3(4)邏輯操作符(notandor)

優(yōu)先級是not>an單分支結構:if語句if語句的控制流程圖

if語句中語句塊執(zhí)行與否依賴于條件判斷。但無論什么情況,控制都會轉到if語句后與該語句同級別的下一條語句單分支結構:if語句if語句的控制流程圖if語句中語句塊單分支結構:if語句微實例4.4:PM2.5空氣質量提醒(1)輸入:接收外部輸入PM2.5值處理:ifPM2.5值>=75,打印空氣污染警告if35<=PM2.5值<75,打印空氣污染警告ifPM2.5值<35,打印空氣質量優(yōu),建議戶外運動輸出:打印空氣質量提醒

微實例4.4m4.4PM25Warning.py

1234567PM=eval(input("請輸入PM2.5數(shù)值:"))if0<=PM<35:print("空氣優(yōu)質,快去戶外運動!")if35<=PM<75:print("空氣良好,適度戶外活動!")if75<=PM:print("空氣污染,請小心!")

單分支結構:if語句微實例4.4:PM2.5空氣質量提醒二分支結構:if-else語句Python中if-else語句用來形成二分支結構,語法格式如下:if<條件>:<語句塊1>else:<語句塊2><語句塊1>是在if條件滿足后執(zhí)行的一個或多個語句序列<語句塊2>是if條件不滿足后執(zhí)行的語句序列二分支語句用于區(qū)分<條件>的兩種可能True或者False,分別形成執(zhí)行路徑二分支結構:if-else語句Python中if-else二分支結構:if-else語句微實例4.5:PM2.5空氣質量提醒(2)微實例4.5m4.5PM25Warning.py

12345PM=eval(input("請輸入PM2.5數(shù)值:"))ifPM>=75:print("空氣存在污染,請小心!")else:

print("空氣沒有污染,可以開展戶外運動!")

二分支結構:if-else語句微實例4.5:PM2.5空二分支結構:if-else語句二分支結構還有一種更簡潔的表達方式,適合通過判斷返回特定值,語法格式如下:<表達式1>if<條件>else<表達式2>

12PM=eval(input("請輸入PM2.5數(shù)值:"))print("空氣{}污染!".format("存在"ifPM>=75else"沒有"))

二分支結構:if-else語句二分支結構還有一種更簡潔的表二分支結構:if-else語句>>>count=2>>>countifcount!=0else"不存在"2>>>count=0>>>countifcount!=0else"不存在""不存在"if…else的緊湊結構非常適合對特殊值處理的情況,如下:二分支結構:if-else語句>>>count=2if多分支結構:if-elif-else語句Python的if-elif-else描述多分支結構,語句格式如下:if<條件1>:<語句塊1>elif<條件2>:<語句塊2>...else:<語句塊N>多分支結構:if-elif-else語句Python的if多分支結構:if-elif-else語句多分支結構是二分支結構的擴展,這種形式通常用于設置同一個判斷條件的多條執(zhí)行路徑。Python依次評估尋找第一個結果為True的條件,執(zhí)行該條件下的語句塊,同時結束后跳過整個if-elif-else結構,執(zhí)行后面的語句。如果沒有任何條件成立,else下面的語句塊被執(zhí)行。else子句是可選的多分支結構:if-elif-else語句多分支結構是二分支多分支結構:if-elif-else語句微實例4.4通過多條獨立的if語句對同一個變量PM進行判斷,這種情況更適合多分支結構,改造后的代碼如下

1234567PM=eval(input("請輸入PM2.5數(shù)值:"))if0<=PM<35:print("空氣優(yōu)質,快去戶外運動!")elif35<=PM<75:print("空氣良好,適度戶外活動!")else:print("空氣污染,請小心!")

多分支結構:if-elif-else語句微實例4.4通過多身體質量指數(shù)BMIBMI的定義如下:BMI=體重(kg)÷身高2(m2)例如,一個人身高1.75米、體重75公斤,他的BMI值為24.49身體質量指數(shù)BMIBMI的定義如下:身體質量指數(shù)BMI分類國際BMI值(kg/m2)國內BMI值(kg/m2)偏瘦<18.5<18.5正常18.5~2518.5~24偏胖25~3024~28肥胖>=30>=28編寫一個根據(jù)體重和身高計算BMI值的程序,并同時輸出國際和國內的BMI指標建議值身體質量指數(shù)BMI分類國際BMI值(kg/m2)國內BMI值身體質量指數(shù)BMI實例代碼5.1e5.1CalBMI.py

12

345678910111213141516171819202122#e5.1CalBMI.pyheight,weight=eval(input("請輸入身高(米)和體重\(公斤)[逗號隔開]:"))bmi=weight/pow(height,2)print("BMI數(shù)值為:{:.2f}".format(bmi))wto,dom="",""ifbmi<18.5:#WTO標準wto="偏瘦"elifbmi<25:#18.5<=bmi<25wto="正常"elifbmi<30:#25<=bmi<30wto="偏胖"else:wto="肥胖"ifbmi<18.5:#我國衛(wèi)生部標準dom="偏瘦"elifbmi<24:#18.5<=bmi<24dom="正常"elifbmi<28:#24<=bmi<28dom="偏胖"else:dom="肥胖"print("BMI指標為:國際'{0}',國內'{1}'".format(wto,dom))

>>>

請輸入身高(米)和體重(公斤)[逗號隔開]:1.75,75BMI數(shù)值為:24.49BMI指標為:國際'正常',國內'偏胖'身體質量指數(shù)BMI實例代碼5.1e5.1CalBMI.py

實例代碼5.2e5.2CalBMI.py

12

3456789101112131415161718#e5.2CalBMI.pyheight,weight=eval(input("請輸入身高(米)和體重\(公斤)[逗號隔開]:"))bmi=weight/pow(height,2)print("BMI數(shù)值為:{:.2f}".format(bmi))wto,dom="",""ifbmi<18.5:wto,dom="偏瘦","偏瘦"elif18.5<=bmi<24:wto,dom="正常","正常"elif24<=bmi<25:wto,dom="正常","偏胖"elif25<=bmi<28:wto,dom="偏胖","偏胖"elif28<=bmi<30:wto,dom="偏胖","肥胖"else:wto,dom="肥胖","肥胖"print("BMI指標為:國際'{0}',國內'{1}'".format(wto,dom))

實例代碼5.2e5.2CalBMI.py

1#e5.2C程序的循環(huán)結構程序的循環(huán)結構遍歷循環(huán):for語句遍歷循環(huán):

根據(jù)循環(huán)執(zhí)行次數(shù)的確定性,循環(huán)可以分為確定次數(shù)循環(huán)和非確定次數(shù)循環(huán)。確定次數(shù)循環(huán)指循環(huán)體對循環(huán)次數(shù)有明確的定義循環(huán)次數(shù)采用遍歷結構中元素個數(shù)來體現(xiàn)Python通過保留字for實現(xiàn)“遍歷循環(huán)”:for<循環(huán)變量>in<遍歷結構>:<語句塊>

遍歷循環(huán):for語句遍歷循環(huán):遍歷循環(huán):for語句遍歷結構可以是字符串、文件、組合數(shù)據(jù)類型或range()函數(shù):循環(huán)N次foriinrange(N):<語句塊>遍歷文件fi的每一行forlineinfi:<語句塊>遍歷字符串sforcins:<語句塊>遍歷列表lsforiteminls:<語句塊>遍歷循環(huán)還有一種擴展模式,使用方法如下:for<循環(huán)變量>in<遍歷結構>:<語句塊1>else:<語句塊2>遍歷循環(huán):for語句遍歷結構可以是字符串、文件、組合數(shù)據(jù)類遍歷循環(huán):for語句當for循環(huán)正常執(zhí)行之后,程序會繼續(xù)執(zhí)行else語句中內容。else語句只在循環(huán)正常執(zhí)行之后才執(zhí)行并結束,因此,可以在<語句塊2>中放置判斷循環(huán)執(zhí)行情況的語句。

12345forsin"BIT":print("循環(huán)進行中:"+s)else:s="循環(huán)正常結束"print(s)

>>>

循環(huán)進行中:B循環(huán)進行中:I循環(huán)進行中:T循環(huán)正常結束遍歷循環(huán):for語句當for循環(huán)正常執(zhí)行之后,程序會繼續(xù)執(zhí)無限循環(huán):while語句無限循環(huán):無限循環(huán)一直保持循環(huán)操作直到特定循環(huán)條件不被滿足才結束,不需要提前知道確定循環(huán)次數(shù)。Python通過保留字while實現(xiàn)無限循環(huán),使用方法如下:while<條件>:<語句塊>語句塊無限循環(huán):while語句無限循環(huán):無限循環(huán):while語句無限循環(huán)也有一種使用保留字else的擴展模式:while<條件>:<語句塊1>else:<語句塊2>

1234567s,idx="BIT",0whileidx<len(s):print("循環(huán)進行中:"+s[idx])idx+=1else:s="循環(huán)正常結束"print(s)

>>>

循環(huán)進行中:B循環(huán)進行中:I循環(huán)進行中:T循環(huán)正常結束無限循環(huán):while語句無限循環(huán)也有一種使用保留字else循環(huán)保留字:break和continue循環(huán)結構有兩個輔助保留字:break和continue,它們用來輔助控制循環(huán)執(zhí)行break用來跳出最內層for或while循環(huán),脫離該循環(huán)后程序從循環(huán)后代嗎繼續(xù)續(xù)執(zhí)行

12345forsin"BIT":foriinrange(10):print(s,end="")ifs=="I":break

>>>

BBBBBBBBBBITTTTTTTTTT其中,break語句跳出了最內層for循環(huán),但仍然繼續(xù)執(zhí)行外層循環(huán)。每個break語句只有能力跳出當前層次循環(huán)循環(huán)保留字:break和continue循環(huán)結構有兩個輔助循環(huán)保留字:break和continuecontinue用來結束當前當次循環(huán),即跳出循環(huán)體中下面尚未執(zhí)行的語句,但不跳出當前循環(huán)。對于while循環(huán),繼續(xù)求解循環(huán)條件。而對于for循環(huán),程序流程接著遍歷循環(huán)列表對比continue和break語句,如下

1234forsin"PYTHON":ifs=="T":continueprint(s,end="")

1234forsin"PYTHON":ifs=="T":breakprint(s,end="")

>>>

PYHON>>>

PY循環(huán)保留字:break和continuecontinue用循環(huán)保留字:break和continuecontinue語句和break語句的區(qū)別是:continue語句只結束本次循環(huán),而不終止整個循環(huán)的執(zhí)行。break語句則是結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立

1234forsin"PYTHON":ifs=="T":continueprint(s,end="")

1234forsin"PYTHON":ifs=="T":breakprint(s,end="")

>>>

PYHON>>>

PY循環(huán)保留字:break和continuecontinue語循環(huán)保留字:break和continuefor循環(huán)和while循環(huán)中都存在一個else擴展用法。else中的語句塊只在一種條件下執(zhí)行,即for循環(huán)正常遍歷了所有內容沒有因為break或return而退出。continue保留字對else沒有影響??聪旅鎯蓚€例子

123456forsin"PYTHON":ifs=="T":continueprint(s,end="")else:print("正常退出")

123456forsin"PYTHON":ifs=="T":breakprint(s,end="")else:print("正常退出")

>>>

PYHON正常退出>>>

PY循環(huán)保留字:break和continuefor循環(huán)和whirandom庫的使用random庫的使用random庫概述隨機數(shù)在計算機應用中十分常見,Python內置的random庫主要用于產生各種分布的偽隨機數(shù)序列。random庫采用梅森旋轉算法(Mersennetwister)生成偽隨機數(shù)序列,可用于除隨機性要求更高的加解密算法外的大多數(shù)工程應用。使用random庫主要目的是生成隨機數(shù),因此,讀者只需要查閱該庫的隨機數(shù)生成函數(shù),找到符合使用場景的函數(shù)使用即可。這個庫提供了不同類型的隨機數(shù)函數(shù),所有函數(shù)都是基于最基本的random.random()函數(shù)擴展而來。random庫概述隨機數(shù)在計算機應用中十分常見,Pythonrandom庫解析函數(shù)描述seed(a=None)初始化隨機數(shù)種子,默認值為當前系統(tǒng)時間random()生成一個[0.0,1.0)之間的隨機小數(shù)randint(a,b)生成一個[a,b]之間的整數(shù)getrandbits(k)生成一個k比特長度的隨機整數(shù)randrange(start,stop[,step])生成一個[start,stop)之間以step為步數(shù)的隨機整數(shù)uniform(a,b)生成一個[a,b]之間的隨機小數(shù)choice(seq)從序列類型(例如:列表)中隨機返回一個元素shuffle(seq)將序列類型中元素隨機排列,返回打亂后的序列sample(pop,k)從pop類型中隨機選取k個元素,以列表類型返回random庫解析函數(shù)描述seed(a=None)初始化隨機random庫解析對random庫的引用方法與math庫一樣,采用下面兩種方式實現(xiàn):importrandom或fromrandomimport*>>>fromrandomimport*>>>random()0.2922089114412476>>>uniform(1,10)1.5913082783598524>>>uniform(1,20)7>>>randrange(0,100,4)#從0開始到100以4遞增的元素中隨機返回96>>>choice(range(100))97>>>ls=list(range(10))>>>print(ls)[0,1,2,3,4,5,6,7,8,9]>>>shuffle(ls)>>>print(ls)[5,8,4,7,6,9,3,0,2,10,1,2,3,4,5,6,7,8,9]random庫解析對random庫的引用方法與math庫一樣random庫解析生成隨機數(shù)之前可以通過seed()函數(shù)指定隨機數(shù)種子,隨機種子一般是一個整數(shù),只要種子相同,每次生成的隨機數(shù)序列也相同。這種情況便于測試和同步數(shù)據(jù)>>>seed(125)#隨機種子賦值125>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'4.4.10'>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'5.10.3'>>>seed(125)#再次給隨機種子賦值125>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'4.4.10'random庫解析生成隨機數(shù)之前可以通過seed()函數(shù)指定π的計算π的計算π的計算

π(圓周率)是一個無理數(shù),即無限不循環(huán)小數(shù)。精確求解圓周率π是幾何學、物理學和很多工程學科的關鍵。對π的精確求解曾經(jīng)是數(shù)學歷史上一直難以解決的問題之一,因為π無法用任何精確公式表示,在電子計算機出現(xiàn)以前,π只能通過一些近似公式的求解得到,直到1948年,人類才以人工計算方式得到π的808位精確小數(shù)。

π的計算π(圓周率)是一個無理數(shù),即無限不循環(huán)小數(shù)。精確求π的計算

隨著計算機的出現(xiàn),數(shù)學家找到了另類求解π的另類方法:蒙特卡羅(MonteCarlo)方法,又稱隨機抽樣或統(tǒng)計試驗方法。當所要求解的問題是某種事件出現(xiàn)的概率,或者是某個隨機變量的期望值時,它們可以通過某種“試驗”的方法,得到這種事件出現(xiàn)的頻率,或者這個隨機變數(shù)的平均值,并用它們作為問題的解。這就是蒙特卡羅方法的基本思想。

π的計算隨著計算機的出現(xiàn),數(shù)學家找到π的計算

應用蒙特卡羅方法求解π的基本步驟如下:隨機向單位正方形和圓結構,拋灑大量“飛鏢”點計算每個點到圓心的距離從而判斷該點在圓內或者圓外用圓內的點數(shù)除以總點數(shù)就是π/4值。隨機點數(shù)量越大,越充分覆蓋整個圖形,計算得到的π值越精確。實際上,這個方法的思想是利用離散點值表示圖形的面積,通過面積比例來求解π值。π的計算應用蒙特卡羅方法求解π的基本步驟如下:π的計算

計算π使用的正方形和圓結構計算π使用的1/4區(qū)域和拋點過程π的計算計算π使用的正方形和圓結構計算π使用的1/4區(qū)域π的計算

實例代碼6.1e6.1CalPi.py

123456789101112131415#e6.1CalPi.pyfromrandomimportrandomfrommathimportsqrtfromtimeimportclockDARTS=10000hits=0.0clock()foriinrange(1,DARTS+1):x,y=random(),random()dist=sqrt(x**2+y**2)ifdist<=1.0:hits=hits+1pi=4*(hits/DARTS)print("Pi值是{}.".format(pi))print("運行時間是:{:5.5}s".format(clock()))

>>>

Pi值是3.144.運行時間是:0.016477sπ的計算實例代碼6.1e6.1CalPi.py

1#eπ的計算

DARTSπ運行時間2103.1093750.011s2113.1386710.012s2123.1503900.014s2133.1435540.018s2143.1413570.030s2153.1478270.049s2163.1419670.116s2183.1445770.363s2203255s2253.141697883640.13s不同拋點數(shù)產生的精度和運行時間π的計算DARTSπ運行時間2103.1093750.01異常處理機制異常處理機制異常處理:try-except語句

12num=eval(input("請輸入一個整數(shù):"))print(num**2)

觀察下面這段小程序:當用戶輸入的不是數(shù)字呢? >>>

請輸入一個整數(shù):10010000>>>

請輸入一個整數(shù):NOTraceback(mostrecentcalllast):File"D:/PythonPL/echoInt.py",line1,in<module>num=eval(input("請輸入一個整數(shù):"))File"<string>",line1,in<module>NameError:name'No'isnotdefined異常處理:try-except語句

1num=eva異常處理:try-except語句(接管錯誤)Python解釋器返回了異常信息,同時程序退出異常處理:try-except語句Python解釋器返回了異常處理:try-except語句Python異常信息中最重要的部分是異常類型,它表明了發(fā)生異常的原因,也是程序處理異常的依據(jù)。Python使用try-except語句實現(xiàn)異常處理,基本的語法格式如下:try: <語句塊1>except<異常類型>: <語句塊2>異常處理:try-except語句Python異常信息中最異常處理:try-except語句

12try:num=eval(input("請輸入一個整數(shù):"))print(num**2)except:print("輸入錯誤,請輸入一個整數(shù)!")

該程序執(zhí)行效果如下:>>>

請輸入一個整數(shù):NO輸入錯誤,請輸入一個整數(shù)!異常處理:try-except語句

1try:

該程序異常的高級用法try-except語句可以支持多個except語句,語法格式如下:try: <語句塊1>except<異常類型1>: <語句塊2>….except<異常類型N>: <語句塊N+1>except: <語句塊N+2>異常的高級用法try-except語句可以支持多個excep異常的高級用法最后一個except語句沒有指定任何類型,表示它對應的語句塊可以處理所有其他異常。這個過程與if-elif-else語句類似,是分支結構的一種表達方式,一段代碼如下

12345678try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"idx=eval(input("請輸入一個整數(shù):"))print(alp[idx])exceptNameError:print("輸入錯誤,請輸入一個整數(shù)!")except:print("其他錯誤")

異常的高級用法最后一個except語句沒有指定任何類型,表示異常的高級用法該程序將用戶輸入的數(shù)字作為索引從字符串alp中返回一個字符,當用戶輸入非整數(shù)字符時,exceptNameError異常被捕獲到,提示升用戶輸入類型錯誤,當用戶輸入數(shù)字不在01到256之間時,異常被except捕獲,程序打印其他錯誤信息,執(zhí)行過程和結果如下:>>>

請輸入一個整數(shù):NO輸入錯誤,請輸入一個整數(shù)!>>>

請輸入一個整數(shù):100其他錯誤異常的高級用法該程序將用戶輸入的數(shù)字作為索引從字符串alp中異常的高級用法

除了try和except保留字外,異常語句還可以與else和finally保留字配合使用,語法格式如下:try: <語句塊1>except<異常類型1>: <語句塊2>else: <語句塊3>finally: <語句塊4>

異常的高級用法除了try和except保留字外,異常語異常的高級用法異常的高級用法異常的高級用法采用else和finally修改代碼如下:

12345678910try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"idx=eval(input("請輸入一個整數(shù):"))print(alp[idx])exceptNameError:print("輸入錯誤,請輸入一個整數(shù)!")else:print("沒有發(fā)生異常")finally:print("程序執(zhí)行完畢,不知道是否發(fā)生了異常")

執(zhí)行過程和結果如下:>>>

請輸入一個整數(shù):5F沒有發(fā)生異常程序執(zhí)行完畢,不知道是否發(fā)生了異常>>>

請輸入一個整數(shù):NO輸入錯誤,請輸入一個整數(shù)!程序執(zhí)行完畢,不知道是否發(fā)生了異常異常的高級用法采用else和finally修改代碼如下:

Python語言程序設計Python語言程序設計第4章

程序的控制結構第4章程序的控制結構程序的基本結構程序的基本結構程序的流程圖程序流程圖用一系列圖形、流程線和文字說明描述程序的基本操作和控制流程,它是程序分析和過程描述的最基本方式。流程圖的基本元素包括7種程序的流程圖程序流程圖用一系列圖形、流程線和文字說明描述程序程序的流程圖程序流程圖示例:由連接點A連接的一個程序

程序的流程圖程序流程圖示例:由連接點A連接的一個程序程序的基本結構順序結構是程序的基礎,但單一的順序結構不可能解決所有問題。程序由三種基本結構組成:順序結構分支結構循環(huán)結構這些基本結構都有一個入口和一個出口。任何程序都由這三種基本結構組合而成程序的基本結構順序結構是程序的基礎,但單一的順序結構不可能解程序的基本結構順序結構是程序按照線性順序依次執(zhí)行的一種運行方式,其中語句塊1S1和語句塊S2表示一個或一組順序執(zhí)行的語句程序的基本結構順序結構是程序按照線性順序依次執(zhí)行的一種運行方程序的基本結構分支結構是程序根據(jù)條件判斷結果而選擇不同向前執(zhí)行路徑的一種運行方式,包括單分支結構和二分支結構。由二分支結構會組合形成多分支結構程序的基本結構分支結構是程序根據(jù)條件判斷結果而選擇不同向前執(zhí)程序的基本結構循環(huán)結構是程序根據(jù)條件判斷結果向后反復執(zhí)行的一種運行方式,根據(jù)循環(huán)體觸發(fā)條件不同,包括條件循環(huán)和遍歷循環(huán)結構程序的基本結構循環(huán)結構是程序根據(jù)條件判斷結果向后反復執(zhí)行的一程序的基本結構實例對于一個計算問題,可以用IPO描述、流程圖描述或者直接以Python代碼方式描述微實例4.1:圓面積和周長的計算。輸入:圓半徑R處理:圓面積:S=π*R*R圓周長:L=2*π*R輸出:圓面積S、周長L

1234R=eval(input("請輸入圓半徑:"))S=3.1415*R*RL=2*3.1415*Rprint("面積和周長:",S,L)問題IPO描述

Python代碼描述

程序的基本結構實例對于一個計算問題,可以用IPO描述、流程圖程序的基本結構實例微實例4.2:實數(shù)絕對值的計算。1234R=eval(input("輸入實數(shù):"))if(R<0):R=-Rprint("絕對值",R)(a)問題IPO描述

(b)流程圖描述

(c)Python代碼描述

程序的基本結構實例微實例4.2:實數(shù)絕對值的計算。1R=程序的基本結構實例微實例4.3:整數(shù)累加。輸入:正整數(shù)R處理:S=1+2+3+…+R輸出:輸出S123456R=eval(input("請輸入正整數(shù):"))i,S=0,0while(i<=R):S=S+ii=i+1print("累加求和",S)(a)問題IPO描述

(b)流程圖描述

(c)Python代碼描述

程序的基本結構實例微實例4.3:整數(shù)累加。輸入:正整數(shù)R1R程序的基本結構實例IPO描述主要用于區(qū)分程序的輸入輸出關系,重點在于結構劃分,算法主要采用自然語言描述流程圖描述側重于描述算法的具體流程關系,流程圖的結構化關系相比自然語言描述更進一步,有助于闡述算法的具體操作過程Python代碼描述是最終的程序產出,最為細致。程序的基本結構實例IPO描述主要用于區(qū)分程序的輸入輸出關系,程序的分支結構程序的分支結構單分支結構:if語句Python中if語句的語法格式如下:if<條件>:語句塊

語句塊是if條件滿足后執(zhí)行的一個或多個語句序列

語句塊中語句通過與if所在行形成縮進表達包含關系if語句首先評估<條件>的結果值,如果結果為True,則執(zhí)行語句塊里的語句序列,然后控制轉向程序的下一條語句。如果結果為False,語句塊里的語句會被跳過。單分支結構:if語句Python中if語句的語法格式如下:布爾類型(bool)TrueFlasebool函數(shù):bool(2)>>>A=1>2>>>type(A)數(shù)字非零為True字符串為True,空字符串為False

布爾類型(bool)True關系運算符if語中<條件>部分可以使用任何能夠產生True或False的語句形成判斷條件最常見的方式是采用關系操作符Python語言共有6個關系操作符操作符數(shù)學符號操作符含義<

<

小于<=≤小于等于>=≥大于等于>

>

大于===等于!=不等于關系運算符if語中<條件>部分可以使用任何能夠產生True或邏輯操作符(notandor)

優(yōu)先級是not>and>or邏輯操作符and和or也稱作短路操作符(short-circuitlogic):它們的參數(shù)從左向右解析,一旦結果可以確定就停止。例如,如果A和C為真而B為假,AandBandC不會解析C

3and4,4and33or4(3),4or3(4)邏輯操作符(notandor)

優(yōu)先級是not>an單分支結構:if語句if語句的控制流程圖

if語句中語句塊執(zhí)行與否依賴于條件判斷。但無論什么情況,控制都會轉到if語句后與該語句同級別的下一條語句單分支結構:if語句if語句的控制流程圖if語句中語句塊單分支結構:if語句微實例4.4:PM2.5空氣質量提醒(1)輸入:接收外部輸入PM2.5值處理:ifPM2.5值>=75,打印空氣污染警告if35<=PM2.5值<75,打印空氣污染警告ifPM2.5值<35,打印空氣質量優(yōu),建議戶外運動輸出:打印空氣質量提醒

微實例4.4m4.4PM25Warning.py

1234567PM=eval(input("請輸入PM2.5數(shù)值:"))if0<=PM<35:print("空氣優(yōu)質,快去戶外運動!")if35<=PM<75:print("空氣良好,適度戶外活動!")if75<=PM:print("空氣污染,請小心!")

單分支結構:if語句微實例4.4:PM2.5空氣質量提醒二分支結構:if-else語句Python中if-else語句用來形成二分支結構,語法格式如下:if<條件>:<語句塊1>else:<語句塊2><語句塊1>是在if條件滿足后執(zhí)行的一個或多個語句序列<語句塊2>是if條件不滿足后執(zhí)行的語句序列二分支語句用于區(qū)分<條件>的兩種可能True或者False,分別形成執(zhí)行路徑二分支結構:if-else語句Python中if-else二分支結構:if-else語句微實例4.5:PM2.5空氣質量提醒(2)微實例4.5m4.5PM25Warning.py

12345PM=eval(input("請輸入PM2.5數(shù)值:"))ifPM>=75:print("空氣存在污染,請小心!")else:

print("空氣沒有污染,可以開展戶外運動!")

二分支結構:if-else語句微實例4.5:PM2.5空二分支結構:if-else語句二分支結構還有一種更簡潔的表達方式,適合通過判斷返回特定值,語法格式如下:<表達式1>if<條件>else<表達式2>

12PM=eval(input("請輸入PM2.5數(shù)值:"))print("空氣{}污染!".format("存在"ifPM>=75else"沒有"))

二分支結構:if-else語句二分支結構還有一種更簡潔的表二分支結構:if-else語句>>>count=2>>>countifcount!=0else"不存在"2>>>count=0>>>countifcount!=0else"不存在""不存在"if…else的緊湊結構非常適合對特殊值處理的情況,如下:二分支結構:if-else語句>>>count=2if多分支結構:if-elif-else語句Python的if-elif-else描述多分支結構,語句格式如下:if<條件1>:<語句塊1>elif<條件2>:<語句塊2>...else:<語句塊N>多分支結構:if-elif-else語句Python的if多分支結構:if-elif-else語句多分支結構是二分支結構的擴展,這種形式通常用于設置同一個判斷條件的多條執(zhí)行路徑。Python依次評估尋找第一個結果為True的條件,執(zhí)行該條件下的語句塊,同時結束后跳過整個if-elif-else結構,執(zhí)行后面的語句。如果沒有任何條件成立,else下面的語句塊被執(zhí)行。else子句是可選的多分支結構:if-elif-else語句多分支結構是二分支多分支結構:if-elif-else語句微實例4.4通過多條獨立的if語句對同一個變量PM進行判斷,這種情況更適合多分支結構,改造后的代碼如下

1234567PM=eval(input("請輸入PM2.5數(shù)值:"))if0<=PM<35:print("空氣優(yōu)質,快去戶外運動!")elif35<=PM<75:print("空氣良好,適度戶外活動!")else:print("空氣污染,請小心!")

多分支結構:if-elif-else語句微實例4.4通過多身體質量指數(shù)BMIBMI的定義如下:BMI=體重(kg)÷身高2(m2)例如,一個人身高1.75米、體重75公斤,他的BMI值為24.49身體質量指數(shù)BMIBMI的定義如下:身體質量指數(shù)BMI分類國際BMI值(kg/m2)國內BMI值(kg/m2)偏瘦<18.5<18.5正常18.5~2518.5~24偏胖25~3024~28肥胖>=30>=28編寫一個根據(jù)體重和身高計算BMI值的程序,并同時輸出國際和國內的BMI指標建議值身體質量指數(shù)BMI分類國際BMI值(kg/m2)國內BMI值身體質量指數(shù)BMI實例代碼5.1e5.1CalBMI.py

12

345678910111213141516171819202122#e5.1CalBMI.pyheight,weight=eval(input("請輸入身高(米)和體重\(公斤)[逗號隔開]:"))bmi=weight/pow(height,2)print("BMI數(shù)值為:{:.2f}".format(bmi))wto,dom="",""ifbmi<18.5:#WTO標準wto="偏瘦"elifbmi<25:#18.5<=bmi<25wto="正常"elifbmi<30:#25<=bmi<30wto="偏胖"else:wto="肥胖"ifbmi<18.5:#我國衛(wèi)生部標準dom="偏瘦"elifbmi<24:#18.5<=bmi<24dom="正常"elifbmi<28:#24<=bmi<28dom="偏胖"else:dom="肥胖"print("BMI指標為:國際'{0}',國內'{1}'".format(wto,dom))

>>>

請輸入身高(米)和體重(公斤)[逗號隔開]:1.75,75BMI數(shù)值為:24.49BMI指標為:國際'正常',國內'偏胖'身體質量指數(shù)BMI實例代碼5.1e5.1CalBMI.py

實例代碼5.2e5.2CalBMI.py

12

3456789101112131415161718#e5.2CalBMI.pyheight,weight=eval(input("請輸入身高(米)和體重\(公斤)[逗號隔開]:"))bmi=weight/pow(height,2)print("BMI數(shù)值為:{:.2f}".format(bmi))wto,dom="",""ifbmi<18.5:wto,dom="偏瘦","偏瘦"elif18.5<=bmi<24:wto,dom="正常","正常"elif24<=bmi<25:wto,dom="正常","偏胖"elif25<=bmi<28:wto,dom="偏胖","偏胖"elif28<=bmi<30:wto,dom="偏胖","肥胖"else:wto,dom="肥胖","肥胖"print("BMI指標為:國際'{0}',國內'{1}'".format(wto,dom))

實例代碼5.2e5.2CalBMI.py

1#e5.2C程序的循環(huán)結構程序的循環(huán)結構遍歷循環(huán):for語句遍歷循環(huán):

根據(jù)循環(huán)執(zhí)行次數(shù)的確定性,循環(huán)可以分為確定次數(shù)循環(huán)和非確定次數(shù)循環(huán)。確定次數(shù)循環(huán)指循環(huán)體對循環(huán)次數(shù)有明確的定義循環(huán)次數(shù)采用遍歷結構中元素個數(shù)來體現(xiàn)Python通過保留字for實現(xiàn)“遍歷循環(huán)”:for<循環(huán)變量>in<遍歷結構>:<語句塊>

遍歷循環(huán):for語句遍歷循環(huán):遍歷循環(huán):for語句遍歷結構可以是字符串、文件、組合數(shù)據(jù)類型或range()函數(shù):循環(huán)N次foriinrange(N):<語句塊>遍歷文件fi的每一行forlineinfi:<語句塊>遍歷字符串sforcins:<語句塊>遍歷列表lsforiteminls:<語句塊>遍歷循環(huán)還有一種擴展模式,使用方法如下:for<循環(huán)變量>in<遍歷結構>:<語句塊1>else:<語句塊2>遍歷循環(huán):for語句遍歷結構可以是字符串、文件、組合數(shù)據(jù)類遍歷循環(huán):for語句當for循環(huán)正常執(zhí)行之后,程序會繼續(xù)執(zhí)行else語句中內容。else語句只在循環(huán)正常執(zhí)行之后才執(zhí)行并結束,因此,可以在<語句塊2>中放置判斷循環(huán)執(zhí)行情況的語句。

12345forsin"BIT":print("循環(huán)進行中:"+s)else:s="循環(huán)正常結束"print(s)

>>>

循環(huán)進行中:B循環(huán)進行中:I循環(huán)進行中:T循環(huán)正常結束遍歷循環(huán):for語句當for循環(huán)正常執(zhí)行之后,程序會繼續(xù)執(zhí)無限循環(huán):while語句無限循環(huán):無限循環(huán)一直保持循環(huán)操作直到特定循環(huán)條件不被滿足才結束,不需要提前知道確定循環(huán)次數(shù)。Python通過保留字while實現(xiàn)無限循環(huán),使用方法如下:while<條件>:<語句塊>語句塊無限循環(huán):while語句無限循環(huán):無限循環(huán):while語句無限循環(huán)也有一種使用保留字else的擴展模式:while<條件>:<語句塊1>else:<語句塊2>

1234567s,idx="BIT",0whileidx<len(s):print("循環(huán)進行中:"+s[idx])idx+=1else:s="循環(huán)正常結束"print(s)

>>>

循環(huán)進行中:B循環(huán)進行中:I循環(huán)進行中:T循環(huán)正常結束無限循環(huán):while語句無限循環(huán)也有一種使用保留字else循環(huán)保留字:break和continue循環(huán)結構有兩個輔助保留字:break和continue,它們用來輔助控制循環(huán)執(zhí)行break用來跳出最內層for或while循環(huán),脫離該循環(huán)后程序從循環(huán)后代嗎繼續(xù)續(xù)執(zhí)行

12345forsin"BIT":foriinrange(10):print(s,end="")ifs=="I":break

>>>

BBBBBBBBBBITTTTTTTTTT其中,break語句跳出了最內層for循環(huán),但仍然繼續(xù)執(zhí)行外層循環(huán)。每個break語句只有能力跳出當前層次循環(huán)循環(huán)保留字:break和continue循環(huán)結構有兩個輔助循環(huán)保留字:break和continuecontinue用來結束當前當次循環(huán),即跳出循環(huán)體中下面尚未執(zhí)行的語句,但不跳出當前循環(huán)。對于while循環(huán),繼續(xù)求解循環(huán)條件。而對于for循環(huán),程序流程接著遍歷循環(huán)列表對比continue和break語句,如下

1234forsin"PYTHON":ifs=="T":continueprint(s,end="")

1234forsin"PYTHON":ifs=="T":breakprint(s,end="")

>>>

PYHON>>>

PY循環(huán)保留字:break和continuecontinue用循環(huán)保留字:break和continuecontinue語句和break語句的區(qū)別是:continue語句只結束本次循環(huán),而不終止整個循環(huán)的執(zhí)行。break語句則是結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立

1234forsin"PYTHON":ifs=="T":continueprint(s,end="")

1234forsin"PYTHON":ifs=="T":breakprint(s,end="")

>>>

PYHON>>>

PY循環(huán)保留字:break和continuecontinue語循環(huán)保留字:break和continuefor循環(huán)和while循環(huán)中都存在一個else擴展用法。else中的語句塊只在一種條件下執(zhí)行,即for循環(huán)正常遍歷了所有內容沒有因為break或return而退出。continue保留字對else沒有影響??聪旅鎯蓚€例子

123456forsin"PYTHON":ifs=="T":continueprint(s,end="")else:print("正常退出")

123456forsin"PYTHON":ifs=="T":breakprint(s,end="")else:print("正常退出")

>>>

PYHON正常退出>>>

PY循環(huán)保留字:break和continuefor循環(huán)和whirandom庫的使用random庫的使用random庫概述隨機數(shù)在計算機應用中十分常見,Python內置的random庫主要用于產生各種分布的偽隨機數(shù)序列。random庫采用梅森旋轉算法(Mersennetwister)生成偽隨機數(shù)序列,可用于除隨機性要求更高的加解密算法外的大多數(shù)工程應用。使用random庫主要目的是生成隨機數(shù),因此,讀者只需要查閱該庫的隨機數(shù)生成函數(shù),找到符合使用場景的函數(shù)使用即可。這個庫提供了不同類型的隨機數(shù)函數(shù),所有函數(shù)都是基于最基本的random.random()函數(shù)擴展而來。random庫概述隨機數(shù)在計算機應用中十分常見,Pythonrandom庫解析函數(shù)描述seed(a=None)初始化隨機數(shù)種子,默認值為當前系統(tǒng)時間random()生成一個[0.0,1.0)之間的隨機小數(shù)randint(a,b)生成一個[a,b]之間的整數(shù)getrandbits(k)生成一個k比特長度的隨機整數(shù)randrange(start,stop[,step])生成一個[start,stop)之間以step為步數(shù)的隨機整數(shù)uniform(a,b)生成一個[a,b]之間的隨機小數(shù)choice(seq)從序列類型(例如:列表)中隨機返回一個元素shuffle(seq)將序列類型中元素隨機排列,返回打亂后的序列sample(pop,k)從pop類型中隨機選取k個元素,以列表類型返回random庫解析函數(shù)描述seed(a=None)初始化隨機random庫解析對random庫的引用方法與math庫一樣,采用下面兩種方式實現(xiàn):importrandom或fromrandomimport*>>>fromrandomimport*>>>random()0.2922089114412476>>>uniform(1,10)1.5913082783598524>>>uniform(1,20)7>>>randrange(0,100,4)#從0開始到100以4遞增的元素中隨機返回96>>>choice(range(100))97>>>ls=list(range(10))>>>print(ls)[0,1,2,3,4,5,6,7,8,9]>>>shuffle(ls)>>>print(ls)[5,8,4,7,6,9,3,0,2,10,1,2,3,4,5,6,7,8,9]random庫解析對random庫的引用方法與math庫一樣random庫解析生成隨機數(shù)之前可以通過seed()函數(shù)指定隨機數(shù)種子,隨機種子一般是一個整數(shù),只要種子相同,每次生成的隨機數(shù)序列也相同。這種情況便于測試和同步數(shù)據(jù)>>>seed(125)#隨機種子賦值125>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'4.4.10'>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'5.10.3'>>>seed(125)#再次給隨機種子賦值125>>>"{}.{}.{}".format(randint(1,10),randint(1,10),randint(1,10))'4.4.10'random庫解析生成隨機數(shù)之前可以通過seed()函數(shù)指定π的計算π的計算π的計算

π(圓周率)是一個無理數(shù),即無限不循環(huán)小數(shù)。精確求解圓周率π是幾何學、物理學和很多工程學科的關鍵。對π的精確求解曾經(jīng)是數(shù)學歷史上一直難以解決的問題之一,因為π無法用任何精確公式表示,在電子計算機出現(xiàn)以前,π只能通過一些近似公式的求解得到,直到1948年,人類才以人工計算方式得到π的808位精確小數(shù)。

π的計算π(圓周率)是一個無理數(shù),即無限不循環(huán)小數(shù)。精確求π的計算

隨著計算機的出現(xiàn),數(shù)學家找到了另類求解π的另類方法:蒙特卡羅(MonteCarlo)方法,又稱隨機抽樣或統(tǒng)計試驗方法。當所要求解的問題是某種事件出現(xiàn)的概率,或者是某個隨機變量的期望值時,它們可以通過某種“試驗”的方法,得到這種事件出現(xiàn)的頻率,或者這個隨機變數(shù)的平均值,并用它們作為問題的解。這就是蒙特卡羅方法的基本思想。

π的計算隨著計算機的出現(xiàn),數(shù)學家找到π的計算

應用蒙特卡羅方法求解π的基本步驟如下:隨機向單位正方形和圓結構,拋灑大量“飛鏢”點計算每個點到圓心的距離從而判斷該點在圓內或者圓外用圓內的點數(shù)除以總點數(shù)就是π/4值。隨機點數(shù)量越大,越充分覆蓋整個圖形,計算得到的π值越精確。實際上,這個方法的思想是利用離散點值表示圖形的面積,通過面積比例來求解π值。π的計算應用蒙特卡羅方法求解π的基本步驟如下:π的計算

計算π使用的正方形和圓結構計算π使用的1/4區(qū)域和拋點過程π的計算計算π使用的正方形和圓結構計算π使用的1/4區(qū)域π的計算

實例代碼6.1e6.1CalPi.py

123456789101112131415#e6.1CalPi.pyfromrandomimportrandomfrommathimportsqrtfromtimeimportclockDARTS=1000

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論