
你有没有想过,为什么程序能根据不同情况做出不同反应?比如输入密码时,对了就登录成功,错了就提示错误——这就是分支控制结构的功劳。
今天,我们就通过一个“成绩评定”的互动案例,从零开始,一步步深入,彻底搞懂分支结构的逻辑。
最简单的分支:if语句
我们先从一个最简单的场景开始:判断成绩是否及格。
score = int(input("请输入你的成绩:")) # 获取用户输入并转换为整数 if score >= 60: # 如果成绩大于等于60 print("及格了!") # 就输出“及格了!” |
运行示例
请输入你的成绩:75 及格了! |
请输入你的成绩:55 (什么也不输出) |
这段代码的问题在于当成绩55分时,程序什么也不输出,体验不好。如果不及格,也应该给个反馈。
双向选择:if-else语句
当成绩不及格时,我们也想给个提示。这时就需要if-else结构。
score = int(input("请输入你的成绩:")) # 获取用户输入并转换为整数 if score >= 60: # 如果成绩大于等于60 print("及格了!") # 就输出“及格了!” else: # 否则(成绩小于60) print("不及格,下次加油!") # 输出“不及格,下次加油!” |
运行示例
请输入你的成绩:75 及格了! |
请输入你的成绩:55 不及格,下次加油! |
现在,无论成绩如何,程序都能给出反馈了。
多级判断:if-elif-else语句
只有及格和不及格,还不够精细。我们想要更详细的等级:优、良、中、差。这时就需要if-elif-else多分支结构。
score = int(input("请输入你的成绩:")) # 获取用户输入并转换为整数 if score >= 90: # 如果成绩大于等于90 print("优秀!") # 输出“优秀!” elif score >= 80: # 否则如果成绩大于等于80 print("良好!") # 输出“良好!” elif score >= 70: # 否则如果成绩大于等于70 print("中等") # 输出“中等” elif score >= 60: # 否则如果成绩大于等于60 print("及格") # 输出“及格” else: # 以上条件都不满足 print("不及格,下次加油!") # 输出“不及格” |
运行示例
请输入你的成绩:85 良好! |
请输入你的成绩:92 优秀! |
请输入你的成绩:68 及格 |
请输入你的成绩:45 不及格,下次加油! |
重要规则:条件是从上往下依次判断,只要有一个条件成立,执行完对应的代码后,立即跳出整个分支结构,后面的条件不会再检查。
进阶:嵌套分支
有时候,我们需要在某个分支内再做进一步判断。比如成绩及格后,还想根据具体分数给更细致的评价。
score = int(input("请输入你的成绩:")) # 获取用户输入并转换为整数 if score >= 60: # 如果成绩大于等于60(及格) print("恭喜你及格了!") # 先输出一句恭喜 # 在及格的情况下,进一步细分等级 if score >= 90: # 如果成绩大于等于90 print("成绩非常优秀!") # 输出“成绩非常优秀!” elif score >= 80: # 否则如果成绩大于等于80 print("成绩良好!") # 输出“成绩良好!” elif score >= 70: # 否则如果成绩大于等于70 print("成绩中等") # 输出“成绩中等” else: # 否则(成绩60-69之间) print("刚及格,继续努力!") # 输出“刚及格,继续努力!” else: # 否则(成绩小于60) print("不及格,下次加油!") # 输出“不及格” |
运行示例
请输入你的成绩:85 恭喜你及格了! 成绩良好! |
请输入你的成绩:62 恭喜你及格了! 刚及格,继续努力! |
请输入你的成绩:48 不及格,下次加油! |
完整版:带异常处理的成绩评定器
前面的程序有一个问题:如果用户输入的不是数字,程序会崩溃。我们来加上异常处理,让程序更健壮。
try: # 尝试执行以下代码 score = int(input("请输入你的成绩:")) # 获取用户输入并转换为整数 if score < 0: # 如果成绩小于0 print("❌ 成绩不能为负数!") # 输出错误提示 elif score > 100: # 否则如果成绩大于100 print("❌ 成绩不能超过100分!") # 输出错误提示 elif score >= 90: # 否则如果成绩大于等于90 print("优秀!") # 输出“优秀!” elif score >= 80: # 否则如果成绩大于等于80 print("良好!") # 输出“良好!” elif score >= 70: # 否则如果成绩大于等于70 print("中等") # 输出“中等” elif score >= 60: # 否则如果成绩大于等于60 print("及格") # 输出“及格” else: # 以上条件都不满足(0-59之间) print("不及格,下次加油!") # 输出“不及格” except ValueError: # 如果发生ValueError(输入不是数字) print("❌ 请输入有效的数字!") # 输出错误提示 |
运行示例
#正常情况 请输入你的成绩:85 良好! |
#负数情况 请输入你的成绩:-10 ❌ 成绩不能为负数! |
#超过100的情况 请输入你的成绩:120 ❌ 成绩不能超过100分! |
#输入非数字的情况 请输入你的成绩:abc ❌ 请输入有效的数字! |
代码逐行完整解释
第1部分:异常处理块
try: # 尝试执行以下代码,如果出错就跳到except
第2部分:获取输入并转换
score = int(input("请输入你的成绩:")) # input()获取用户输入的字符串,int()转换为整数,赋值给score
第3部分:边界条件检查
if score < 0: # 如果成绩小于0
print("❌ 成绩不能为负数!") # 输出错误提示
elif score > 100: # 否则如果成绩大于100
print("❌ 成绩不能超过100分!") # 输出错误提示
这两行先检查成绩是否在有效范围内(0-100)。注意:这里用了elif,因为负数和大于是互斥的。
第4部分:成绩等级判断
elif score >= 90: # 否则如果成绩大于等于90
print("优秀!") # 输出“优秀!”
elif score >= 80: # 否则如果成绩大于等于80
print("良好!") # 输出“良好!”
elif score >= 70: # 否则如果成绩大于等于70
print("中等") # 输出“中等”
elif score >= 60: # 否则如果成绩大于等于60
print("及格") # 输出“及格”
else: # 以上条件都不满足(0-59之间)
print("不及格,下次加油!") # 输出“不及格”
注意顺序:从高到低判断,这样才能保证85分走到score >= 80的分支,而不是被score >= 60先截住。
第5部分:异常处理
except ValueError: # 如果try块中发生ValueError(比如int()转换失败)
print("❌ 请输入有效的数字!") # 输出错误提示
分支结构核心要点总结
1. 三种分支形式
2. 两个重要规则
冒号不能少:if、elif、else后面都要加冒号
缩进要对齐:属于某个分支的代码必须缩进,Python用缩进表示代码块
3. 条件表达式
条件判断的结果是布尔值(True或False)
score == 100 | ||
score != 0 | ||
score > 60 | ||
score < 30 | ||
score >= 60 | ||
score <= 100 |
分支控制结构让程序有了“思考”能力:
if:如果满足条件,就做某事
elif:否则如果满足另一个条件,就做另一件事
else:如果都不满足,就做这件事
就像生活中的各种选择——如果饿了,就吃饭;如果不饿但渴了,就喝水;如果都不,就继续玩。
掌握好分支结构,你的程序就不再是“死脑筋”,而是能根据不同情况灵活应变,并且能优雅地处理各种意外输入,让程序更健壮、更专业!
动手试试吧
1. 基础题:修改程序,增加“优秀”的细分:90-94为“优秀”,95-100为“卓越”
2. 进阶题:增加一个条件,如果成绩是整数但不是百分制(比如101),提示“成绩无效”
3. 挑战题:增加一个功能,输入负数时,提示“成绩不能为负数”,并让用户重新输入(需要用到循环)
【上周答案公布】输出斐波那契数列项
练习1:输出斐波那契数列的前20项
n = 20 a, b = 0, 1 print("斐波那契数列的前20项是:") for i in range(n): print(a, end=" ") a, b=b, a+b |
输出结果

练习2:输出斐波那契数列中所有小于2000的项
a, b = 0, 1 # 初始化前两项:a是当前项,b是下一项 print("斐波那契数列中小于2000的项是:") # 输出提示信息 while a < 2000: # 当当前项a小于2000时,继续循环 print(a, end=" ") # 输出当前项a,end=" "表示不换行,用空格隔开 a, b = b, a + b # 更新a和b:新的a等于旧的b,新的b等于旧的a加旧的b print() # 循环结束后换行 |
输出结果

练习3:找出第1个大于10000的斐波那契数
a, b = 0, 1 # 初始化前两项:a是当前项,b是下一项 position = 1 # 位置计数器,从第1项开始计数 while a <= 10000: # 当当前项a小于等于10000时,继续循环 a, b = b, a + b # 更新a和b:新的a等于旧的b,新的b等于旧的a加旧的b position = position + 1 # 位置计数器加1 print("斐波那契数列中第1个大于10000的数是:") # 输出提示信息 print(f"数值:{a}") # 输出找到的数(此时a已经大于10000) print(f"位置:第{position}项") # 输出这个数是第几项 |
输出结果

精彩回顾:
一起学Python(004):Python程序三种控制结构:顺序、分支和循环
一起学Python(003):Python代码书写规则:那些让程序崩溃的“小细节”
一起学Python(002):计算机的“数字秘密”——0和1如何统治世界?
一起学Python(001):为什么文科生也要学Python?
欢迎【点赞】+【转发】❤️
