官术网_书友最值得收藏!

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ù)來判斷閏年,相關語句如下。

主站蜘蛛池模板: 青海省| 镇赉县| 呈贡县| 肇庆市| 凤城市| 乡城县| 江陵县| 清涧县| 乌鲁木齐市| 济源市| 车致| 嘉鱼县| 平昌县| 渭源县| 缙云县| 县级市| 沙河市| 特克斯县| 邳州市| 嘉善县| 冷水江市| 都江堰市| 伊宁市| 台北县| 民权县| 秦皇岛市| 财经| 大英县| 十堰市| 馆陶县| 鄯善县| 阿荣旗| 中卫市| 广汉市| 信阳市| 共和县| 绥德县| 诸暨市| 岗巴县| 瑞丽市| 永新县|