首页技术文章正文

Python多分支结构判断条件的if-elif-else 语句

更新时间:2022-10-14 来源:黑马程序员 浏览量:

利用二分支结构对程序进行改动,在一定程度上降低了代码冗余,提高了程序效率。然而,表面看来程序得到了优化,实际上改动后的程序出现了一个致命缺陷——程序逻辑存在问题:只要接收的输入不是1~5,程序总会判定“今天非工作日。”。

如此看来,第2个判断条件不应被省略,但能否将判断结构间的并列关系改为互斥关系呢?答案是肯定的。

Python中提供了多分支结构:if-elif-else。多分支结构可连接多个判断条件,产生多个分支,但各个分支间存在互斥关系,最终至多有一个分支被执行。多分支结构的语法格式如下:

i£判断条件1:
       代码段1
elif判断条件2:
       代码段2
...
elif判断条件n:
       代码段n
else:
       代码段n+1

多分支结构中的if、elif、else、“:”和代码段前的缩进都是语法的一部分,if语句、每一个elif语句和else语句都是一个分支,其后的代码段通过缩进与其产生逻辑联系。进入多分支结构后先判断语句中的条件,若满足则执行代码段1后跳出分支结构;若不满足则继续判断elif语句中的条件,在满足条件时执行相应代码段;若所有条件都不满足,执行else语句之后的代码段。多分支结构的流程图如下图所示。

1665741119459_代码段.png

使用多分支结构实现判断当天是否为工作日的程序,完整代码如下:

#07_working_day_elif.py
day = int ( input("今天是工作日吗(请输入整数1~7)?") )
if day in [1,2,3,4,5]:
    print(”今天是工作日。“)
elif day in [6,7]:
    pxint(“今天非工作日。“)
else:
    print("输人有误。“)

以上程序根据输入进行判断,若输入为1~5,判定当天是工作日;若输入为6、7,判定当天非工作日;若输人为其他,提示“输入有误”。

多分支结构中条件较多,各分支为互斥关系,每个多分支结构中只有一段代码会被执行,但判断条件可能存在包含关系,此时需要注意判断条件的先后顺序。例如实现一个这样的程序:根据输入的百分制成绩输出由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,五分制成绩为D;若百分制成绩高于70.0,五分制成绩为C;以此类推。执行以上程序,输入百分制成绩75,执行结果如下:

请输人百分制成绩:75
对应的五分制成绩是:D

以上程序虽能正常运行,但运行结果却不符合预期,这显然是因为代码的逻辑存在问题。分析筏码,我们会注意到高于70.0、80.0、90.0的成绩必然高于60.0,因此只要输入的成绩高于60.0,程序总是执行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) )

综上可知,判断条件是分支结构的核心,条件决定程序的流向,当分支中的条件存在包含关系时,条件的先后顺序同样影响程序的逻辑,因此,在使用分支结构时应。


分享到:
在线咨询 我要报名
和我们在线交谈!