首頁技術文章正文

Python多分支結構判斷條件的if-elif-else 語句

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

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

如此看來,第2個判斷條件不應被省略,但能否將判斷結構間的并列關系改為互斥關系呢?答案是肯定的。

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

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

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

1665741119459_代碼段.png

使用多分支結構實現(xiàn)判斷當天是否為工作日的程序,完整代碼如下:

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

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

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

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

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

請輸人百分制成績:75
對應的五分制成績是:D

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

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

綜上可知,判斷條件是分支結構的核心,條件決定程序的流向,當分支中的條件存在包含關系時,條件的先后順序同樣影響程序的邏輯,因此,在使用分支結構時應。


分享到:
在線咨詢 我要報名
和我們在線交談!