- Python程序設計與算法基礎教程(第2版)(微課版)
- 江紅 余青松
- 1563字
- 2019-11-15 20:18:56
3.2 選擇結(jié)構(gòu)
選擇結(jié)構(gòu)可以根據(jù)條件來控制代碼的執(zhí)行分支,也叫分支結(jié)構(gòu)。Python使用if語句來實現(xiàn)分支結(jié)構(gòu)。
3.2.1 分支結(jié)構(gòu)的形式
分支結(jié)構(gòu)包含單分支、雙分支和多分支等形式,流程如圖3-2(a)~(c)所示。

圖3-2 if語句的選擇結(jié)構(gòu)
3.2.2 單分支結(jié)構(gòu)
if語句單分支結(jié)構(gòu)的語法形式如下。

其中:
(1)條件表達式:可以是關系表達式、邏輯表達式、算術表達式等。
(2)語句/語句塊:可以是單個語句,也可以是多個語句。多個語句的縮進必須一致。
當條件表達式的值為真(True)時,執(zhí)行if后的語句(塊),否則不做任何操作,控制將轉(zhuǎn)到if語句的結(jié)束點。其流程如圖3-2(a)所示。
條件表達式最后被評價為bool值True(真)或False(假)。如果表達式的結(jié)果為數(shù)值類型(0)、空字符串("")、空元組(())、空列表([])、空字典({}),其bool值為False(假),否則其bool值為True(真)。例如,123、"abc"、(1,2)均為True。
【例3.2】 單分支結(jié)構(gòu)示例(if_2desc.py):輸入兩個數(shù)a和b,比較兩者的大小,使得a大于b。

程序運行結(jié)果如下。

3.2.3 雙分支結(jié)構(gòu)
if語句雙分支結(jié)構(gòu)的語法形式如下。

當條件表達式的值為真(True)時,執(zhí)行if后的語句(塊)1,否則執(zhí)行else后的語句(塊)2,其流程如圖3-2(b)所示。
Python提供了下列條件表達式來實現(xiàn)等價于其他語言的三元條件運算符((條件)?語句1:語句2)的功能:

例如,如果x≥0,則y=x,否則y=0,可以表述為:

【例3.3】 計算分段函數(shù):
此分段函數(shù)有以下幾種實現(xiàn)方式,請讀者自行編程測試。
(1)利用單分支結(jié)構(gòu)實現(xiàn)。

(2)利用雙分支結(jié)構(gòu)實現(xiàn)。

(3)利用條件運算語句實現(xiàn)。

3.2.4 多分支結(jié)構(gòu)
if語句多分支結(jié)構(gòu)的語法形式如下。

該語句的作用是根據(jù)不同條件表達式的值確定執(zhí)行哪個語句(塊),其流程如圖3-2(c)所示。
【例3.4】 已知某課程的百分制分數(shù)mark,將其轉(zhuǎn)換為五級制(優(yōu)、良、中、及格、不及格)的評定等級grade。評定條件如下:

根據(jù)評定條件,有以下3種方法實現(xiàn)。
方法一:

方法二:

方法三:

其中,方法一使用關系運算符“>=”,按分數(shù)從大到小依次比較;方法二使用關系運算符和邏輯運算符表達完整的條件,即使語句順序不按比較的分數(shù)從大到小依次書寫,也可以得到正確的等級評定結(jié)果;方法三使用關系運算符“>=”,但按分數(shù)從小到大依次比較。
在上述3種方法中,方法一、方法二正確,而且方法一簡潔明了,方法二雖然正確,但是存在冗余條件。方法三雖然語法沒有錯誤,但是判斷結(jié)果錯誤:根據(jù)mark分數(shù)所得等級評定結(jié)果只有“及格”和“不及格”兩種,請讀者根據(jù)程序流程自行分析原因。
【例3.5】 已知坐標點(x,y),判斷其所在的象限(if_coordinate.py)。

程序運行結(jié)果如下。

3.2.5 if語句的嵌套
在if語句中又包含一個或多個if語句稱為if語句的嵌套,其一般形式如下。

【例3.6】 計算分段函數(shù):
此分段函數(shù)有以下幾種實現(xiàn)方式,請讀者判斷哪些是正確的,并自行編程測試正確的實現(xiàn)方式。
方法一(多分支結(jié)構(gòu)):

方法二(if語句嵌套結(jié)構(gòu)):

方法三:

方法四:

請讀者畫出每種方法相應的流程圖,并進行分析測試。其中,方法一、方法二和方法三是正確的,方法四是錯誤的。
3.2.6 if語句的典型示例代碼
if語句的典型示例代碼如表3-1所示。當if或else的語句塊僅包含一條語句時,該語句也可以直接寫在關鍵字if或else的同一行后面,以使代碼緊湊。
表3-1 if語句的典型示例代碼

3.2.7 選擇結(jié)構(gòu)綜合舉例
【例3.7】 輸入3個數(shù),按從大到小的順序排序(if_3desc.py)。
先比較a和b,使得a>b;然后比較a和c,使得a>c,此時a最大;最后比較b和c,使得b>c。

程序運行結(jié)果如下。

【例3.8】 編程判斷某一年是否為閏年(leapyear.py)。判斷閏年的條件是年份能被4整除但不能被100整除,或者能被400整除,其判斷流程參見圖3-3。

圖3-3 閏年的判斷條件
方法一:使用一個邏輯表達式包含所有的閏年條件,相關語句如下。

方法二:使用嵌套的if語句,相關語句如下。

方法三:使用if…elif語句,相關語句如下。

方法四:使用calendar模塊的isleap()函數(shù)來判斷閏年,相關語句如下。

- Raspberry Pi for Python Programmers Cookbook(Second Edition)
- Progressive Web Apps with React
- HoloLens Beginner's Guide
- Mastering Spring MVC 4
- 物聯(lián)網(wǎng)系統(tǒng)開發(fā):從0到1構(gòu)建IoT平臺(第2版)
- The React Workshop
- Mastering Predictive Analytics with Python
- Hands-On Natural Language Processing with Python
- Android開發(fā):從0到1 (清華開發(fā)者書庫)
- Java Web開發(fā)就該這樣學
- GitHub入門與實踐
- Python自然語言理解:自然語言理解系統(tǒng)開發(fā)與應用實戰(zhàn)
- Modernizing Legacy Applications in PHP
- TypeScript圖形渲染實戰(zhàn):2D架構(gòu)設計與實現(xiàn)
- 分布式數(shù)據(jù)庫HBase案例教程