首頁(yè)技術(shù)文章正文

Python多分支結(jié)構(gòu)判斷條件的if-elif-else 語(yǔ)句

更新時(shí)間:2022-10-14 來(lái)源:黑馬程序員 瀏覽量:

利用二分支結(jié)構(gòu)對(duì)程序進(jìn)行改動(dòng),在一定程度上降低了代碼冗余,提高了程序效率。然而,表面看來(lái)程序得到了優(yōu)化,實(shí)際上改動(dòng)后的程序出現(xiàn)了一個(gè)致命缺陷——程序邏輯存在問(wèn)題:只要接收的輸入不是1~5,程序總會(huì)判定“今天非工作日。”。

如此看來(lái),第2個(gè)判斷條件不應(yīng)被省略,但能否將判斷結(jié)構(gòu)間的并列關(guān)系改為互斥關(guān)系呢?答案是肯定的。

Python中提供了多分支結(jié)構(gòu):if-elif-else。多分支結(jié)構(gòu)可連接多個(gè)判斷條件,產(chǎn)生多個(gè)分支,但各個(gè)分支間存在互斥關(guān)系,最終至多有一個(gè)分支被執(zhí)行。多分支結(jié)構(gòu)的語(yǔ)法格式如下:

i£判斷條件1:
       代碼段1
elif判斷條件2:
       代碼段2
...
elif判斷條件n:
       代碼段n
else:
       代碼段n+1

多分支結(jié)構(gòu)中的if、elif、else、“:”和代碼段前的縮進(jìn)都是語(yǔ)法的一部分,if語(yǔ)句、每一個(gè)elif語(yǔ)句和else語(yǔ)句都是一個(gè)分支,其后的代碼段通過(guò)縮進(jìn)與其產(chǎn)生邏輯聯(lián)系。進(jìn)入多分支結(jié)構(gòu)后先判斷語(yǔ)句中的條件,若滿足則執(zhí)行代碼段1后跳出分支結(jié)構(gòu);若不滿足則繼續(xù)判斷elif語(yǔ)句中的條件,在滿足條件時(shí)執(zhí)行相應(yīng)代碼段;若所有條件都不滿足,執(zhí)行else語(yǔ)句之后的代碼段。多分支結(jié)構(gòu)的流程圖如下圖所示。

1665741119459_代碼段.png

使用多分支結(jié)構(gòu)實(shí)現(xiàn)判斷當(dāng)天是否為工作日的程序,完整代碼如下:

#07_working_day_elif.py
day = int ( input("今天是工作日嗎(請(qǐng)輸入整數(shù)1~7)?") )
if day in [1,2,3,4,5]:
    print(”今天是工作日?!?
elif day in [6,7]:
    pxint(“今天非工作日?!?
else:
    print("輸人有誤?!?

以上程序根據(jù)輸入進(jìn)行判斷,若輸入為1~5,判定當(dāng)天是工作日;若輸入為6、7,判定當(dāng)天非工作日;若輸人為其他,提示“輸入有誤”。

多分支結(jié)構(gòu)中條件較多,各分支為互斥關(guān)系,每個(gè)多分支結(jié)構(gòu)中只有一段代碼會(huì)被執(zhí)行,但判斷條件可能存在包含關(guān)系,此時(shí)需要注意判斷條件的先后順序。例如實(shí)現(xiàn)一個(gè)這樣的程序:根據(jù)輸入的百分制成績(jī)輸出由A~E表示的五分制成績(jī)。此時(shí)很容易寫出如下代碼:

#08_grade_conversion.py
score = eval(input(“請(qǐng)輸入百分制成績(jī):“))
if score > 60.0:
    grade = "D"
elif score > 70.0:
    grade = "C"
elif score > 80.0:
    grade = "B"
elif score > 90.0:
    grade ="A"
else:
    grade = "E"
print(”對(duì)應(yīng)的五分制成績(jī)是:()".format (grade ) )

以上程序依次將60.0、70.0、80.0、90.0作為成績(jī)的臨界點(diǎn),若百分制成績(jī)高于60.0,五分制成績(jī)?yōu)镈;若百分制成績(jī)高于70.0,五分制成績(jī)?yōu)镃;以此類推。執(zhí)行以上程序,輸入百分制成績(jī)75,執(zhí)行結(jié)果如下:

請(qǐng)輸人百分制成績(jī):75
對(duì)應(yīng)的五分制成績(jī)是:D

以上程序雖能正常運(yùn)行,但運(yùn)行結(jié)果卻不符合預(yù)期,這顯然是因?yàn)榇a的邏輯存在問(wèn)題。分析筏碼,我們會(huì)注意到高于70.0、80.0、90.0的成績(jī)必然高于60.0,因此只要輸入的成績(jī)高于60.0,程序總是執(zhí)行if條件之后的代碼段,輸出的五分制成績(jī)總是D。修改代碼,修正程序邏輯結(jié)構(gòu),修改后的代碼如下:

#09_grade_conversion_change_order.py
score=eval(input("”請(qǐng)輸入百分制考試成績(jī):"))
if score > 90.0:
   grade = "A"
elif score > 80.0:
   grade = "B"
elif score > 70.0:
   grade = "C"
elif score > 60.0:
   grade = "D"
else:
   grade = "E"
print("對(duì)應(yīng)的五分制成績(jī)是:{}".format(grade) )

綜上可知,判斷條件是分支結(jié)構(gòu)的核心,條件決定程序的流向,當(dāng)分支中的條件存在包含關(guān)系時(shí),條件的先后順序同樣影響程序的邏輯,因此,在使用分支結(jié)構(gòu)時(shí)應(yīng)。


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!