第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

# 后续代码
后续代码

语法要点

  1. ifelifelse 都是Python关键字,必须小写
  2. 每个ifelifelse 后都必须有冒号 :
  3. 所有代码块都必须缩进
  4. 可以有多个elif,但只能有一个if和一个else
  5. 只会执行第一个匹配的条件,执行完后跳过剩余所有条件
  6. 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("不及格")

输出

良好

执行过程

  1. 判断 score &gt;= 90:85 >= 90 → False
  2. 判断 score &gt;= 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("老年人")

输出

中学生

执行过程

  1. 判断 age &lt; 6:15 < 6 → False
  2. 判断 age &lt; 12:15 < 12 → False
  3. 判断 age &lt; 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的含义

elifelse if 的缩写,意思是"否则,如果..."。

elif的特点

  1. 顺序执行:从上到下依次判断每个条件
  2. 只执行第一个匹配的条件:一旦某个条件为True,就执行对应的代码块,然后跳过剩余所有条件
  3. 可以有多个elif:根据需要可以添加任意数量的elif
  4. 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("中等")  # 不会执行

本集小结

  1. if-elif-else用于处理多个条件的情况
  2. elifelse if 的缩写
  3. 从上到下依次判断每个条件
  4. 只执行第一个匹配的条件
  5. 可以有多个elif,但只能有一个if和一个else
  6. else是可选的
  7. 条件顺序很重要:将最严格的条件放在前面
  8. 链式比较:Python支持 a &lt;= x &lt; b 这种写法
  9. 使用字典可以优化简单的多条件判断
  10. 先检查特殊条件可以提高代码可读性

课后练习

练习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语句,我们可以实现更复杂的条件判断逻辑,处理多层次的决策问题。

敬请期待!

« 上一篇 if-else条件语句 下一篇 » 嵌套条件语句