2.6 分支语句
一、单分支 if
语法:
if 条件表达式:
语句块
逻辑:条件成立(True)→执行里面语句;条件不成立(False)→直接跳过,不执行。
示例:
age = int(input("请输入年龄:"))
if age >= 18:
print("成年")
print("程序结束")
简答背诵:单分支只有if,满足条件执行,不满足跳过。
二、双分支 if … else
语法:
if 条件表达式:
语句块1
else:
语句块2
逻辑:条件成立执行if后的代码;不成立,执行else后的代码,二选一,必定执行其中一块。
示例:
age = int(input("请输入年龄:"))
if age >= 18:
print("成年人")
else:
print("未成年人")
简答背诵:双分支if-else,二选一。
补充:三元表达式(选择题偶尔考,简写双分支)
a = int(input())
res = "成年" if a >= 18 else "未成年"
print(res)
三、多分支 if … elif … else
语法:
if 条件1:
语句块1
elif 条件2:
语句块2
elif 条件3:
语句块3
……
else:
语句块n
⚠️ 重点考点:
- 从上往下依次判断;只要某一个条件为True,执行对应代码,然后直接跳出整个分支,后面不再判断
elif可以有多个;else可选,放在最后,前面所有条件都不满足才执行else- elif不能单独使用,必须跟在if后面
示例:成绩分级
score = int(input("输入分数:"))
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
易错点:顺序不能乱,如果先写score>=60,会判断错误!
四、嵌套if(拓展考点,编程大题)
if里面再写if,缩进控制层级
age = int(input())
if age >= 18:
if age >= 60:
print("成年老人")
else:
print("青壮年")
else:
print("未成年")
五、考试核心背诵简答要点
- Python分支语句依靠缩进划分代码块,缩进错误会报错。
- 单分支:
if,条件成立执行,不成立跳过。 - 双分支:
if…else,两种情况,必执行其一。 - 多分支:
if…elif…else,多条件依次判断,匹配到一个就结束。 - 条件表达式结果只能是布尔值:True(真)、False(假)。
六、配套简答题题干(直接加入题库)
- 简述单分支if语句的格式与执行流程。
- 简述双分支if-else语句的格式与执行流程。
- 简述多分支if-elif-else语句的执行特点。
- Python分支语句依靠什么区分代码块?
七、易错题提醒
- elif 不能写成 else if(Python不支持else if)
- 冒号
:不能丢!if、elif、else后面都要加冒号 - 缩进不能随便乱改,同一个代码块缩进一致
如果你需要,我继续给你讲while、for循环,或者直接出一套【分支语句】的检测卷(填空10、单选10、多选3、判断10)。
第一部分:10 道练习题
第 1 题:超市购物优惠计算
基础进阶
顾客购买商品,输入商品总价 price,按照以下规则计算最终付款金额:
- 总价满 200 元,打 8 折。
- 总价满 100 元但不足 200 元,打 9 折。
- 总价不足 100 元,不打折。
- 如果最终金额满 150 元,再减免 10 元。
要求: 输出原价、折扣后金额和最终付款金额。注意,满 150 元的判断针对折扣后的金额。
第 2 题:判断一个三位数的特殊性质
数字处理
输入一个三位正整数 num,分别计算它的百位、十位和个位数字。
- 如果三个数字都相同,输出“相同数字”。
- 如果三个数字之和能被 3 整除,输出“数字之和能被 3 整除”。
- 如果以上条件都不满足,输出“普通数字”。
要求: 必须使用 // 和 % 提取数字,不能把整数转换成字符串处理。
第 3 题:学生成绩等级与补考判断
多条件判断
输入学生成绩 score(0~100 的整数),根据规则输出结果:
- 90~100 分:优秀。
- 80~89 分:良好。
- 60~79 分:及格。
- 0~59 分:不及格。
- 如果成绩不在 0~100 范围内,输出“成绩无效”。
进阶要求: 不及格学生中,成绩达到 50 分的提示“补考有机会”,低于 50 分的提示“需要重点补习”。
要求: 不要让无效成绩进入正常的等级判断。
第 4 题:停车场收费系统
分段计费
输入停车时长 hours,单位为小时,可以是小数。收费规则如下:
- 不超过 1 小时,收费 5 元。
- 超过 1 小时、不超过 3 小时,收费 10 元。
- 超过 3 小时、不超过 8 小时,收费 20 元。
- 超过 8 小时,收费 30 元。
如果停车时长大于 24 小时,额外输出“长时间停车,请确认停车记录”。
要求: 停车时长必须大于 0,否则提示输入无效。
第 5 题:判断平年与闰年
逻辑综合
输入一个年份 year,判断它是平年还是闰年。
闰年规则:
- 能被 400 整除,是闰年。
- 能被 4 整除但不能被 100 整除,也是闰年。
- 其他情况都是平年。
要求: 使用 % 判断整除关系,并处理年份必须大于 0 的情况。
挑战: 解释为什么 2000 年是闰年,而 1900 年不是。
第 6 题:工资计算器
综合计算
输入员工的正常工作小时数 hours 和每小时工资 rate。
- 每天正常工作 8 小时以内,按正常工资计算。
- 超过 8 小时的部分,按 1.5 倍工资计算。
- 如果总工资超过 500 元,额外奖励 50 元。
要求: 输出正常工资、加班工资、奖励金额和最终工资。
注意: 工作小时数不能为负数,每小时工资必须大于 0。
第 7 题:游戏角色战斗结算
游戏逻辑
玩家攻击怪物,输入攻击力 attack、怪物防御力 defense 和怪物当前血量 hp。
伤害计算规则:
- 当攻击力大于防御力时,伤害为攻击力减去防御力。
- 当攻击力不大于防御力时,至少造成 1 点伤害。
- 如果攻击力是 10 的倍数,触发暴击,伤害翻倍。
- 怪物剩余血量不能低于 0。
要求: 输出最终伤害、剩余血量,并判断怪物是否被击败。
注意: 暴击判断应使用原始攻击力,而不是计算后的伤害。
第 8 题:手机话费套餐计算
分段计算
输入本月通话分钟数 minutes,套餐规则如下:
- 套餐包含 100 分钟,月费 30 元。
- 超出 100 分钟的部分,每分钟 0.2 元。
- 如果通话时间超过 300 分钟,超出 300 分钟的部分改为每分钟 0.1 元。
要求: 输出本月总费用,并判断费用是否超过 60 元。
注意: 100 分钟以内的通话不额外收费;超过 300 分钟时,前 200 分钟超出套餐的部分仍按 0.2 元计算。
第 9 题:秒数转换与时间判断
整除与取余
输入一个非负整数 seconds,将其转换为小时、分钟和秒。
例如:输入 3675,输出 1 小时 1 分钟 15 秒。
进阶要求:
- 如果转换后的小时数达到 24,输出“已经达到或超过一天”。
- 如果总秒数不足 60,输出“不到一分钟”。
- 如果总秒数是 60 的倍数,输出“整分钟”。
要求: 使用 // 和 % 进行转换,不能使用日期时间库。
第 10 题:运动会积分排名
综合挑战
某班级参加三项比赛,输入三项得分 a、b、c,每项得分为 0~100 分。
计算总分,并根据以下规则评定:
- 总分达到 270 分:金牌等级。
- 总分达到 240 分但不足 270 分:银牌等级。
- 总分达到 180 分但不足 240 分:铜牌等级。
- 总分不足 180 分:继续努力。
进阶要求:
- 如果三项得分完全相同,额外输出“三项成绩一致”。
- 如果总分是 3 的倍数,额外输出“总分是 3 的倍数”。
- 任何一项成绩超出范围,都提示“成绩输入无效”,不进行等级评定。
第二部分:练习要求
建议学生完成每道题时遵循以下要求:
- 必须使用
if、elif、else完成需要的分支判断。 - 至少使用一种算术运算符,例如
+、-、*、/、//、%。 - 合理使用比较运算符和逻辑运算符组合条件。
- 考虑边界值、非法输入,以及多个条件同时成立的情况。
- 除题目要求外,不使用循环、列表、函数、异常处理等尚未学习的知识。
第三部分:教师参考的难度梯度
| 难度 | 题目 | 重点训练 |
|---|---|---|
| 入门进阶 | 1、3 | 分支结构、条件范围 |
| 中等 | 2、4、5 | 取余、整除、逻辑组合 |
| 中等偏上 | 6、8、9 | 分段计算、运算顺序 |
| 综合挑战 | 7、10 | 多条件组合、结果修正 |
教学建议: 这组题最值得训练的不是写出多少个 if,而是让学生先理清计算步骤,再决定判断顺序。尤其是第 1、6、7、8 题,适合要求学生先写出计算流程,再动手编码。
如果用于课堂作业,可以先让学生独立完成这 10 道题,再统一讲解参考代码和典型错误。
下面是第一组《Python 分支语句 + 算术运算符》10 道进阶练习题的参考答案。代码尽量使用初学者已经学过的 input()、int()、float()、if/elif/else 和算术运算符,不使用循环、列表、函数等进阶语法。
第1题:超市购物优惠
题目要求: 满 200 元打八折,满 100 元打九折,不足 100 元不打折;折后金额满 150 元再减 10 元。
amount = float(input("请输入购物金额:"))
if amount < 0:
print("购物金额不能为负数")
else:
if amount >= 200:
total = amount * 0.8
elif amount >= 100:
total = amount * 0.9
else:
total = amount
if total >= 150:
total = total - 10
print("实际支付:", round(total, 2), "元")
关键知识点:
if/elif/else进行分段判断。- 两次
if分别处理打折和额外减免。 round(total, 2)保留两位小数。
第2题:三位数数字特殊性质
题目要求: 输入一个三位正整数,分别提取百位、十位和个位,判断是否满足指定条件。
num = int(input("请输入一个三位正整数:"))
if num < 100 or num > 999:
print("输入错误,请输入三位正整数")
else:
hundreds = num // 100
tens = num // 10 % 10
ones = num % 10
print("百位:", hundreds)
print("十位:", tens)
print("个位:", ones)
if hundreds == tens and tens == ones:
print("三个数字都相同")
else:
print("三个数字不完全相同")
关键知识点:
//:整数除法,取商的整数部分。%:取余数。num // 10 % 10:提取十位数字。
第3题:成绩等级与补考
题目要求: 根据成绩判断等级,并对不及格的学生提示补考。
score = float(input("请输入考试成绩:"))
if score < 0 or score > 100:
print("成绩输入错误")
elif score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("中等")
elif score >= 60:
print("及格")
else:
print("不及格,需要补考")
关键知识点: elif 按顺序判断条件。因为前面的条件已经排除了更高的分数,所以后面只需要判断下限。
第4题:停车场分段收费
题目要求: 停车不超过 1 小时收费 5 元;超过 1 小时但不超过 3 小时收费 10 元;超过 3 小时,每增加 1 小时加收 3 元。
这里约定:超过整小时的部分按 1 小时计算。
hours = float(input("请输入停车小时数:"))
if hours < 0:
print("停车时间不能为负数")
elif hours == 0:
print("停车费:0元")
elif hours <= 1:
print("停车费:5元")
elif hours <= 3:
print("停车费:10元")
else:
extra_hours = int(hours - 3)
if hours - 3 > extra_hours:
extra_hours = extra_hours + 1
fee = 10 + extra_hours * 3
print("停车费:", fee, "元")
关键知识点:
- 分段收费。
- 使用
int()取整数部分,再通过比较判断是否需要多算一个小时。 - 这里没有使用
math.ceil(),避免引入额外知识。
第5题:闰年判断
题目要求: 判断输入的年份是否为闰年。
year = int(input("请输入年份:"))
if year <= 0:
print("年份必须大于0")
elif year % 400 == 0:
print(year, "是闰年")
elif year % 100 == 0:
print(year, "不是闰年")
elif year % 4 == 0:
print(year, "是闰年")
else:
print(year, "不是闰年")
关键知识点: 闰年的判断规则是:能被 400 整除,或者能被 4 整除但不能被 100 整除。
第6题:工资与加班工资计算
题目要求: 正常工作时间每小时 20 元,超过 8 小时的部分按 1.5 倍计算。
hours = float(input("请输入工作小时数:"))
if hours < 0:
print("工作小时数不能为负数")
elif hours <= 8:
salary = hours * 20
print("工资:", round(salary, 2), "元")
else:
salary = 8 * 20 + (hours - 8) * 20 * 1.5
print("工资:", round(salary, 2), "元")
关键知识点: 加班工资需要分成两部分计算:正常工时工资和加班工时工资。
第7题:游戏角色战斗伤害计算
题目要求: 实际伤害等于攻击力减去防御力,但至少造成 1 点伤害。
attack = int(input("请输入攻击力:"))
defense = int(input("请输入防御力:"))
if attack < 0 or defense < 0:
print("攻击力和防御力不能为负数")
else:
damage = attack - defense
if damage < 1:
damage = 1
print("实际伤害:", damage)
关键知识点: 先进行算术运算,再通过分支语句修正结果。
第8题:手机话费套餐
题目要求: 根据通话分钟数计算话费。这里约定:基础月租 20 元,100 分钟以内不额外收费,超过 100 分钟的部分每分钟 0.2 元。
minutes = float(input("请输入通话分钟数:"))
if minutes < 0:
print("通话分钟数不能为负数")
elif minutes <= 100:
fee = 20
print("本月话费:", fee, "元")
else:
fee = 20 + (minutes - 100) * 0.2
print("本月话费:", round(fee, 2), "元")
关键知识点: 将固定费用与超出部分的费用相加。
第9题:秒数转换时分秒
题目要求: 输入一个总秒数,将它转换成小时、分钟和秒。
total_seconds = int(input("请输入总秒数:"))
if total_seconds < 0:
print("秒数不能为负数")
else:
hours = total_seconds // 3600
minutes = total_seconds % 3600 // 60
seconds = total_seconds % 60
print(hours, "小时", minutes, "分钟", seconds, "秒")
关键知识点:
- 小时数:总秒数除以 3600 取整。
- 分钟数:先去掉整小时,再除以 60 取整。
- 剩余秒数:总秒数对 60 取余。
第10题:三项成绩积分等级
题目要求: 输入三门课程成绩,计算总分和平均分,并根据平均分评定等级。
score1 = float(input("请输入第一门成绩:"))
score2 = float(input("请输入第二门成绩:"))
score3 = float(input("请输入第三门成绩:"))
if (score1 < 0 or score1 > 100 or
score2 < 0 or score2 > 100 or
score3 < 0 or score3 > 100):
print("成绩必须在0到100之间")
else:
total = score1 + score2 + score3
average = total / 3
print("总分:", total)
print("平均分:", round(average, 2))
if average >= 90:
print("等级:优秀")
elif average >= 80:
print("等级:良好")
elif average >= 60:
print("等级:及格")
else:
print("等级:不及格")
关键知识点:
- 使用
+计算总分。 - 使用
/计算平均分。 - 使用比较运算符和分支语句划分等级。
教学建议
这 10 道题可以重点训练学生的三种能力:
| 能力 | 代表题目 |
|---|---|
| 分段判断与边界处理 | 第1、3、4、5题 |
| 算术运算与数据拆分 | 第2、6、7、8题 |
| 综合计算与结果转换 | 第9、10题 |
注意: 第4题采用了“超过整小时按一小时计算”的规则;如果你的原题要求不同,收费算法也需要相应调整。第8题的手机套餐规则是为了给出完整参考答案而补充的示例规则。