Skip to main content

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

⚠️ 重点考点:

  1. 从上往下依次判断;只要某一个条件为True,执行对应代码,然后直接跳出整个分支,后面不再判断
  2. elif 可以有多个;else可选,放在最后,前面所有条件都不满足才执行else
  3. 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("未成年")

五、考试核心背诵简答要点​

  1. Python分支语句依靠缩进划分代码块,缩进错误会报错。
  2. 单分支:if,条件成立执行,不成立跳过。
  3. 双分支:if…else,两种情况,必执行其一。
  4. 多分支:if…elif…else,多条件依次判断,匹配到一个就结束。
  5. 条件表达式结果只能是布尔值:True(真)、False(假)。

六、配套简答题题干(直接加入题库)​

  1. 简述单分支if语句的格式与执行流程。
  2. 简述双分支if-else语句的格式与执行流程。
  3. 简述多分支if-elif-else语句的执行特点。
  4. 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 的倍数”。
  • 任何一项成绩超出范围,都提示“成绩输入无效”,不进行等级评定。

第二部分:练习要求​

建议学生完成每道题时遵循以下要求:

  1. 必须使用 if、elif、else 完成需要的分支判断。
  2. 至少使用一种算术运算符,例如 +、-、*、/、//、%。
  3. 合理使用比较运算符和逻辑运算符组合条件。
  4. 考虑边界值、非法输入,以及多个条件同时成立的情况。
  5. 除题目要求外,不使用循环、列表、函数、异常处理等尚未学习的知识。

第三部分:教师参考的难度梯度​

难度题目重点训练
入门进阶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题的手机套餐规则是为了给出完整参考答案而补充的示例规则。