第13集:if-elif-else多条件判断
本集学习目标
- 掌握if-elif-else语句的语法和用法
- 理解elif的作用和执行顺序
- 学会处理多个条件的情况
- 掌握多条件判断的优化技巧
- 通过实际练习掌握多条件判断的使用
为什么需要if-elif-else?
在实际编程中,我们经常需要从多个条件中选择一个执行。如果只用if-else,代码会变得冗长且效率低下。
示例对比
使用多个if:
score = 85
if score >= 90:
print("优秀")
if score >= 80 and score < 90:
print("良好")
if score >= 70 and score < 80:
print("中等")
if score >= 60 and score < 70:
print("及格")
if score < 60:
print("不及格")缺点:
- 所有条件都会被检查,效率低
- 代码冗长,容易出错
使用if-elif-else:
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("中等")
elif score >= 60:
print("及格")
else:
print("不及格")优点:
- 只执行第一个匹配的条件,效率高
- 代码简洁,易读性强
if-elif-else语句的基本语法
if 条件1:
# 条件1为True时执行
代码块1
elif 条件2:
# 条件1为False且条件2为True时执行
代码块2
elif 条件3:
# 条件1、2都为False且条件3为True时执行
代码块3
else:
# 所有条件都为False时执行
代码块4
# 后续代码
后续代码语法要点:
if、elif、else都是Python关键字,必须小写- 每个
if、elif、else后都必须有冒号: - 所有代码块都必须缩进
- 可以有多个
elif,但只能有一个if和一个else - 只会执行第一个匹配的条件,执行完后跳过剩余所有条件
else是可选的
执行流程图
开始
↓
判断条件1
↓
True ──→ 执行代码块1 ────────────┐
↓ ↓
False → 判断条件2 ↓
↓ ↓
True ──→ 执行代码块2 ───────────┤
↓ ↓
False → 判断条件3 ↓
↓ ↓
True ──→ 执行代码块3 ───────────┤
↓ ↓
False → 执行else代码块 ─────────┤
↓ ↓
继续执行
↓
结束基本示例
示例1:成绩分级
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("中等")
elif score >= 60:
print("及格")
else:
print("不及格")输出:
良好执行过程:
- 判断
score >= 90:85 >= 90 → False - 判断
score >= 80:85 >= 80 → True → 执行print("良好") → 结束
示例2:年龄分类
age = 15
if age < 6:
print("学龄前儿童")
elif age < 12:
print("小学生")
elif age < 18:
print("中学生")
elif age < 60:
print("成年人")
else:
print("老年人")输出:
中学生执行过程:
- 判断
age < 6:15 < 6 → False - 判断
age < 12:15 < 12 → False - 判断
age < 18:15 < 18 → True → 执行print("中学生") → 结束
示例3:温度建议
temperature = 25
if temperature >= 35:
print("天气极热,请待在室内!")
elif temperature >= 30:
print("天气很热,注意防暑降温!")
elif temperature >= 25:
print("天气较热,适合户外活动!")
elif temperature >= 15:
print("天气舒适,可以外出!")
elif temperature >= 5:
print("天气较冷,注意保暖!")
else:
print("天气很冷,注意防寒!")输出:
天气舒适,可以外出!elif详解
elif的含义
elif 是 else if 的缩写,意思是"否则,如果..."。
elif的特点
- 顺序执行:从上到下依次判断每个条件
- 只执行第一个匹配的条件:一旦某个条件为True,就执行对应的代码块,然后跳过剩余所有条件
- 可以有多个elif:根据需要可以添加任意数量的elif
- else是可选的:可以没有else,但如果所有条件都不满足,什么都不执行
示例4:多个elif
day = 3
if day == 1:
print("星期一")
elif day == 2:
print("星期二")
elif day == 3:
print("星期三")
elif day == 4:
print("星期四")
elif day == 5:
print("星期五")
elif day == 6:
print("星期六")
elif day == 7:
print("星期日")
else:
print("无效的日期")输出:
星期三示例5:不使用else
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("中等")
elif score >= 60:
print("及格")
# 注意:这里没有else,如果score < 60,什么都不输出
# 如果score < 60,我们希望什么都不做
score = 55
# 这段代码不会输出任何内容条件的顺序很重要!
示例6:错误的条件顺序
score = 85
# 错误:条件顺序不对,永远无法执行后面的条件
if score >= 60:
print("及格")
elif score >= 80: # 这个条件永远不会被判断
print("良好")
elif score >= 90: # 这个条件永远不会被判断
print("优秀")输出:
及格问题:因为85 >= 60为True,直接执行第一个条件,后面的条件永远不会被检查。
示例7:正确的条件顺序
score = 85
# 正确:从高到低排列条件
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("中等")
elif score >= 60:
print("及格")
else:
print("不及格")输出:
良好正确做法:将最严格的条件放在前面,从高到低排列。
实际应用案例
案例1:学生成绩评级系统
def 成绩评级(score):
if score >= 90:
return 'A'
elif score >= 80:
return 'B'
elif score >= 70:
return 'C'
elif score >= 60:
return 'D'
else:
return 'F'
# 测试
print(f"95分:{成绩评级(95)}") # A
print(f"85分:{成绩评级(85)}") # B
print(f"75分:{成绩评级(75)}") # C
print(f"65分:{成绩评级(65)}") # D
print(f"55分:{成绩评级(55)}") # F案例2:BMI计算器
def BMI分类(bmi):
if bmi < 18.5:
return "偏瘦"
elif bmi < 24:
return "正常"
elif bmi < 28:
return "偏胖"
else:
return "肥胖"
# 计算BMI:体重(kg) / 身高(m)²
weight = 70 # kg
height = 1.75 # m
bmi = weight / (height ** 2)
print(f"BMI = {bmi:.1f}")
print(f"体重分类:{BMI分类(bmi)}")输出:
BMI = 22.9
体重分类:正常案例3:邮费计算器
def 计算邮费(weight):
if weight <= 100: # 100g以内
return 5
elif weight <= 500: # 100-500g
return 10
elif weight <= 1000: # 500-1000g
return 15
elif weight <= 2000: # 1-2kg
return 20
else: # 超过2kg
return 25 + (weight - 2000) // 1000 * 10
# 测试
print(f"50g的邮费:¥{计算邮费(50)}")
print(f"300g的邮费:¥{计算邮费(300)}")
print(f"800g的邮费:¥{计算邮费(800)}")
print(f"1500g的邮费:¥{计算邮费(1500)}")
print(f"3000g的邮费:¥{计算邮费(3000)}")案例4:用户等级系统
def 获取用户等级(points):
if points >= 10000:
return "钻石会员"
elif points >= 5000:
return "黄金会员"
elif points >= 2000:
return "白银会员"
elif points >= 500:
return "青铜会员"
else:
return "普通会员"
# 测试
points = 7500
level = 获取用户等级(points)
print(f"积分:{points}")
print(f"等级:{level}")案例5:时间段问候
import datetime
def 根据时间问候():
hour = datetime.datetime.now().hour
if hour < 6:
return "夜深了,早点休息!"
elif hour < 9:
return "早上好!新的一天开始了!"
elif hour < 12:
return "上午好!"
elif hour < 14:
return "中午好!记得吃午饭哦!"
elif hour < 18:
return "下午好!"
elif hour < 22:
return "晚上好!"
else:
return "夜深了,早点休息!"
greeting = 根据时间问候()
print(greeting)案例6:游戏装备品质
def 获取装备品质(rarity_score):
if rarity_score >= 95:
return "传说(橙色)"
elif rarity_score >= 85:
return "史诗(紫色)"
elif rarity_score >= 70:
return "稀有(蓝色)"
elif rarity_score >= 50:
return "优秀(绿色)"
else:
return "普通(白色)"
# 测试
score = 88
quality = 获取装备品质(score)
print(f"稀有度评分:{score}")
print(f"装备品质:{quality}")多条件判断的优化技巧
技巧1:使用字典代替if-elif-else
当条件较多且都是简单判断时,可以使用字典优化代码。
# 传统写法
day = 3
if day == 1:
day_name = "星期一"
elif day == 2:
day_name = "星期二"
elif day == 3:
day_name = "星期三"
# ... 更多条件
# 优化写法
day = 3
day_map = {
1: "星期一",
2: "星期二",
3: "星期三",
4: "星期四",
5: "星期五",
6: "星期六",
7: "星期日"
}
day_name = day_map.get(day, "无效的日期")
print(day_name)技巧2:使用区间判断
对于数值范围,可以使用区间判断简化代码。
# 传统写法
score = 85
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
# 优化写法:使用区间
score = 85
if 90 <= score <= 100:
grade = 'A'
elif 80 <= score < 90:
grade = 'B'
elif 70 <= score < 80:
grade = 'C'
elif 60 <= score < 70:
grade = 'D'
else:
grade = 'F'技巧3:先检查特殊条件
将特殊情况放在前面处理。
# 检查输入是否有效
score = 105
if score < 0 or score > 100:
print("分数必须在0-100之间!")
elif score >= 90:
print("优秀")
elif score >= 80:
print("良好")
# ... 其他条件常见错误与注意事项
错误1:条件顺序错误
# 错误:条件顺序不对
score = 85
if score >= 60:
print("及格") # 会执行这个
elif score >= 80:
print("良好") # 永远不会执行正确:从高到低排列条件
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好") # 会执行这个
elif score >= 60:
print("及格")错误2:忘记elif
# 错误:多个if-else
score = 85
if score >= 90:
print("优秀")
else:
if score >= 80:
print("良好")
else:
if score >= 70:
print("中等")正确:使用elif
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("中等")错误3:条件重复
# 错误:条件重复
score = 85
if score >= 80:
print("良好")
elif score >= 80 and score < 90: # 重复条件
print("优秀")正确:去掉重复条件
score = 85
if score >= 90:
print("优秀")
elif score >= 80: # 这里不用写<90,因为前面已经判断了>=90
print("良好")错误4:使用多个if代替if-elif-else
# 错误:使用多个if
score = 85
if score >= 90:
print("优秀")
if score >= 80: # 会执行
print("良好") # 会输出
if score >= 70: # 会执行
print("中等") # 会输出问题:85满足>=80和>=70,会输出"良好"和"中等"
正确:使用if-elif-else
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好") # 只会输出这一个
elif score >= 70:
print("中等") # 不会执行本集小结
- if-elif-else用于处理多个条件的情况
- elif 是
else if的缩写 - 从上到下依次判断每个条件
- 只执行第一个匹配的条件
- 可以有多个elif,但只能有一个if和一个else
- else是可选的
- 条件顺序很重要:将最严格的条件放在前面
- 链式比较:Python支持
a <= x < b这种写法 - 使用字典可以优化简单的多条件判断
- 先检查特殊条件可以提高代码可读性
课后练习
练习1:成绩等级
编写程序,根据成绩输出等级:
- 90-100:A
- 80-89:B
- 70-79:C
- 60-69:D
- 0-59:F
score = 85
# 你的代码在这里练习2:月份天数
编写程序,根据月份判断天数(不考虑闰年)。
month = 2
# 你的代码在这里练习3:年龄分类
编写程序,根据年龄分类:
- 0-5:婴儿
- 6-12:儿童
- 13-17:少年
- 18-35:青年
- 36-60:中年
- 60以上:老年
age = 25
# 你的代码在这里练习4:BMI计算
编写程序,根据BMI值判断体重分类:
- BMI < 18.5:偏瘦
- 18.5 <= BMI < 24:正常
- 24 <= BMI < 28:偏胖
- BMI >= 28:肥胖
bmi = 22.9
# 你的代码在这里练习5:时间段问候
编写程序,根据当前时间输出不同的问候语。
hour = 14 # 假设现在是下午2点
# 你的代码在这里
# 5-9点:早上好
# 9-12点:上午好
# 12-14点:中午好
# 14-18点:下午好
# 18-22点:晚上好
# 其他时间:夜深了练习6:天气建议
编写程序,根据温度提供建议:
30度:天气炎热,注意防暑
- 20-30度:天气舒适,适合外出
- 10-20度:天气凉爽,适当添衣
- <10度:天气寒冷,注意保暖
temperature = 25
# 你的代码在这里下集预告
下一集我们将学习第14集:嵌套条件语句。通过嵌套if语句,我们可以实现更复杂的条件判断逻辑,处理多层次的决策问题。
敬请期待!