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

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

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

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

如此看來,第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)的語法格式如下:

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

多分支結(jié)構(gòu)中的if、elif、else、“:”和代碼段前的縮進(jìn)都是語法的一部分,if語句、每一個(gè)elif語句和else語句都是一個(gè)分支,其后的代碼段通過縮進(jìn)與其產(chǎn)生邏輯聯(lián)系。進(jìn)入多分支結(jié)構(gòu)后先判斷語句中的條件,若滿足則執(zhí)行代碼段1后跳出分支結(jié)構(gòu);若不滿足則繼續(xù)判斷elif語句中的條件,在滿足條件時(shí)執(zhí)行相應(yīng)代碼段;若所有條件都不滿足,執(zhí)行else語句之后的代碼段。多分支結(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ù)輸入的百分制成績輸出由A~E表示的五分制成績。此時(shí)很容易寫出如下代碼:

#08_grade_conversion.py
score = eval(input(“請(qǐng)輸入百分制成績:“))
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)的五分制成績是:()".format (grade ) )

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

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

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

#09_grade_conversion_change_order.py
score=eval(input("”請(qǐng)輸入百分制考試成績:"))
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)的五分制成績是:{}".format(grade) )

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


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