《Python電子教案4-1 程序的控制結(jié)構(gòu)[谷風(fēng)參考]》由會員分享,可在線閱讀,更多相關(guān)《Python電子教案4-1 程序的控制結(jié)構(gòu)[谷風(fēng)參考](41頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第4章 程序的控制結(jié)構(gòu)1谷風(fēng)書苑程序的基本結(jié)構(gòu)2谷風(fēng)書苑 程序流程圖用一系列圖形、流程線和文字說明描述程序的基本操作和控制流程,它是程序分析和過程描述的最基本方式程序流程圖 起止框表示一個程序的開始和結(jié)束; 判斷框判斷一個條件是否成立,根據(jù)判斷結(jié)果選擇不同的執(zhí)行路徑 處理框表示一組處理過程; 輸入輸出框表示數(shù)據(jù)輸入或結(jié)果輸出;程序流程圖 注釋框增加程序的解釋; 流向線以帶箭頭直線或曲線形式指示程序的執(zhí)行路徑; 連接點將多個流程圖連接到一起,常用于將一個較大流程圖分割為若干部分。程序流程圖程序流程圖 順序結(jié)構(gòu)是程序按照線性順序依次執(zhí)行的一種運行方式,如圖4.3所示,其中S1和S2表示一個或一組順
2、序執(zhí)行的語句。程序的基本結(jié)構(gòu) 分支結(jié)構(gòu)是程序根據(jù)條件判斷結(jié)果而選擇不同向前執(zhí)行路徑的一種運行方式。由二分支結(jié)構(gòu)會組合形成多分支結(jié)構(gòu)。程序的基本結(jié)構(gòu) 循環(huán)結(jié)構(gòu)是程序根據(jù)條件判斷結(jié)果向后反復(fù)執(zhí)行的一種運行方式,根據(jù)循環(huán)體觸發(fā)條件不同,循環(huán)結(jié)構(gòu)包括條件循環(huán)和遍歷循環(huán)結(jié)構(gòu)。程序的基本結(jié)構(gòu) 對于一個計算問題,可以用IPO描述、流程圖描述或者直接以Python代碼方式描述。本書僅對這幾種描述進(jìn)行介紹,功能簡單的問題建議大家直接編寫Python代碼,功能復(fù)雜的問題讀者可以采用IPO描述或流程圖描述為手段。下面給出3個微實例,通過不同的描述方法具體解釋程序的三種基本結(jié)構(gòu)。程序的基本結(jié)構(gòu)實例 根據(jù)圓的半徑計算圓
3、的面積和周長。圖4.6分別給出了該問題的IPO描述、流程圖描述和Python代碼描述。微實例4.1:圓面積和周長的計算。輸入輸入:圓半徑R處理處理:圓面積:S = *R*R圓周長:L = 2*R輸出輸出:圓面積S、周長L 程序的描述方式主要有三類,分別是自然語言、流程圖和偽代碼。 自然語言描述方式指使用人類語言直接描述程序,IPO描述是這類的一種。優(yōu)點是靈活自然,缺點是比較繁瑣,容易出現(xiàn)二義性,一個描述可以產(chǎn)生多種不同的程序代碼。 流程圖描述是程序最直觀易懂的表達(dá)方式,主要適用于較短算法。優(yōu)點是直觀、清晰且邏輯確定,缺點是流程圖繪制比較繁瑣,當(dāng)程序較大時流程圖會很復(fù)雜,反而降低了表達(dá)的清晰性。
4、程序的基本結(jié)構(gòu)實例 偽代碼描述是介于自然語言與編程語言之間的一種算法描述語言。使用偽代碼不用拘泥于具體編程語言,對整個算法運行過程的描述最接近自然語言。與直接的自然語言描述不同,偽代碼在保持程序結(jié)構(gòu)的情況下描述算法程序的基本結(jié)構(gòu)實例 計算用戶給定實數(shù)的絕對值。圖4.7分別給出了該計算問題的IPO描述、流程圖描述和Python代碼描述。微實例4.2:實數(shù)絕對值的計算微實例4.3:整數(shù)累加。輸入:正整數(shù)R處理:S=1+2+3+R輸出:輸出S 計算1到正整數(shù)R的算術(shù)和。圖4.8分別給出了該計算問題的IPO描述、流程圖描述和Python代碼描述。 IPO描述、流程圖描述和Python代碼描述是解決計算
5、問題的三種描述方式,細(xì)致程度逐步遞進(jìn)。IPO描述主要用于區(qū)分程序的輸入輸出關(guān)系,重點在于結(jié)構(gòu)劃分,主要采用自然語言描述。流程圖描述側(cè)重于描述算法的具體流程關(guān)系,流程圖的結(jié)構(gòu)化關(guān)系相比自然語言描述更進(jìn)一步,有助于闡述算法的具體操作過程。Python代碼描述是最終的程序產(chǎn)出,最為細(xì)致。程序的基本結(jié)構(gòu)實例程序的分支結(jié)構(gòu)17谷風(fēng)書苑 Python中if語句的語法格式如下:if : 是if條件滿足后執(zhí)行的一個或多個語句序列,中語句通過與if所在行形成縮進(jìn)表達(dá)包含關(guān)系。單分支結(jié)構(gòu): if語句 If語句首先評估的結(jié)果值,如果結(jié)果為True,則執(zhí)行里的語句序列,然后控制轉(zhuǎn)向程序的下一條語句。如果結(jié)果為Fals
6、e,里的語句會被跳過。if語句的控制過程如圖4.9所示單分支結(jié)構(gòu): if語句 if語句中執(zhí)行與否依賴于條件判斷。但無論什么情況,控制都會轉(zhuǎn)到if語句后與該語句同級別的下一條語句。 if語句中部分可以使用任何能夠產(chǎn)生True或False的語句或函數(shù)。形成判斷條件最常見的方式是采用關(guān)系操作符。單分支結(jié)構(gòu): if語句 Python語言共有6個關(guān)系操作符,見表4.1所示。單分支結(jié)構(gòu): if語句操作符數(shù)學(xué)符號操作符含義小于=大于等于大于=等于!=不等于 一個簡化版的空氣質(zhì)量標(biāo)準(zhǔn)采用三級模式:0-35為優(yōu),35-75為良,75以上為污染。人們也許不關(guān)心PM2.5指數(shù)值具體為多少,更關(guān)心空氣質(zhì)量到底怎樣。計
7、算機(jī)可以通過PM2.5指數(shù)分級發(fā)布空氣質(zhì)量提醒。微實例4.4:PM 2.5空氣質(zhì)量提醒(1) 該問題的IPO描述如下:輸入:接收外部輸入PM2.5值處理:if PM2.5值 = 75,打印空氣污染警告if 35 = PM2.5值 75,打印空氣污染警告if PM2.5值 35,打印空氣質(zhì)量優(yōu),建議戶外運動輸出:打印空氣質(zhì)量提醒 微實例4.4:PM 2.5空氣質(zhì)量提醒(1)微實例4.4:PM 2.5空氣質(zhì)量提醒(1) 微實例4.4展示了用數(shù)字進(jìn)行條件比較的例子,字符或字符串也可以用于條件比較。字符串比較本質(zhì)上是字符串對應(yīng)的Unicode編碼的比較,因此,字符串的比較按照字典順序進(jìn)行。 例如,英文
8、大寫字符對應(yīng)的Unicode編碼比小寫字符小。以下是一些例子:微實例4.4:PM 2.5空氣質(zhì)量提醒(1) Python中if-else語句用來形成二分支結(jié)構(gòu),語法格式如下:if :else: 二分支結(jié)構(gòu): if-else語句 是在if條件滿足后執(zhí)行的一個或多個語句序列,是if條件不滿足后執(zhí)行的語句序列。 二分支語句用于區(qū)分的兩種可能True或者False,分別形成執(zhí)行路徑。二分支結(jié)構(gòu): if-else語句二分支結(jié)構(gòu): if-else語句 二分支結(jié)構(gòu)還有一種更簡潔的表達(dá)方式,適合通過判斷返回特定值,語法格式如下: if else 其中,一般是數(shù)字類型或字符串類型的一個值,微實例4-5可以改造為
9、:二分支結(jié)構(gòu): if-else語句 Python的if-elif-else描述多分支結(jié)構(gòu),語句格式如下,如圖4.10所示if : elif : . else: 多分支結(jié)構(gòu): if-elif-else語句 多分支結(jié)構(gòu)是二分支結(jié)構(gòu)的擴(kuò)展,這種形式通常用于設(shè)置同一個判斷條件的多條執(zhí)行路徑。 Python依次評估尋找第一個結(jié)果為True的條件,執(zhí)行該條件下的語句塊,同時跳過整個if-elif-else結(jié)構(gòu),執(zhí)行后面的語句。如果沒有任何條件成立,else下面的語句塊被執(zhí)行。else子句是可選的。多分支結(jié)構(gòu): if-elif-else語句 微實例4.4通過多條獨立的if語句對同一個變量PM進(jìn)行判斷,這種情
10、況更適合多分支結(jié)構(gòu),改造后的代碼如下:多分支結(jié)構(gòu): if-elif-else語句實例5: 身體質(zhì)量指數(shù)BMI33谷風(fēng)書苑身體質(zhì)量指數(shù)BMI BMI值可以“客觀的”衡量個人的肥胖程度或者說健康程度。世界衛(wèi)生組織(WHO)根據(jù)對全球人口體重的統(tǒng)計認(rèn)為,BMI值低于18.5 kg/m2時屬于“過輕”,表明個體可能營養(yǎng)不良或者飲食無法保障;BMI值高于25 kg/m2時屬于“過重”。分類國際BMI值(kg/m2)國內(nèi)BMI值(kg/m2)偏瘦18.5=30=28身體質(zhì)量指數(shù)BMI 本實例編寫一個根據(jù)體重和身高計算BMI值的程序,并同時輸出國際和國內(nèi)的BMI指標(biāo)建議值。該問題的IPO描述如下:輸入:身高
11、和體重值處理:計算BMI值,并根據(jù)BMI指標(biāo)分類找到合適分類輸出:打印指標(biāo)分類信息身體質(zhì)量指數(shù)BMI實例代碼5.1實例代碼5.1程序執(zhí)行后的效果如下: 實例代碼5.1采用了多分支結(jié)構(gòu)對BMI數(shù)值按照不同區(qū)間范圍進(jìn)行分類,這種采用if-elif-else分支語句進(jìn)行程序設(shè)計的方式十分常見。盡管需要同時打印國際和國內(nèi)兩套BMI標(biāo)準(zhǔn),程序中采用兩個if-elif-else語句分別計算兩類不同BMI值。這種做法的好處是代碼清晰明了,容易調(diào)試。身體質(zhì)量指數(shù)BMI實例代碼5.2 程序執(zhí)行后的效果如下: 比較實例代碼5.1和實例代碼5.2可以看到,if語句的運用主要與程序編寫者對問題的理解及算法設(shè)計有關(guān),采用一組if語句將兩套BMI指標(biāo)融合在一起,這實際上是算法的改變。即使對專業(yè)程序員來說,程序的簡潔性和可讀性都比更少的代碼行數(shù)重要,這里,推薦采用實例代碼5.1的方式編寫程序。身體質(zhì)量指數(shù)BMI