第24课:嵌套的俄罗斯套娃——条件嵌套

🎯 本课目标

  • 理解条件嵌套的概念和用途
  • 掌握在if语句内部再写if语句的技巧
  • 学会处理多层级的判断逻辑
  • 能够优化嵌套结构,避免过度嵌套
  • 制作需要多层次判断的实用程序

🤔 趣味引入:生活中的"层层判断"

想象一下:生活中的很多决定需要层层判断:

  • 🎒 如果要出门
  • 如果是晴天 → 戴帽子
  • 如果是雨天 → 带伞
  • 如果雨很大 → 穿雨衣
  • 如果雨很小 → 打伞就行
  • 📚 如果要学习
  • 如果有作业 → 先做作业
  • 如果作业难 → 请教老师
  • 如果作业简单 → 自己做
  • 如果没作业 → 复习功课

这就是条件嵌套——在条件里面再套条件,像俄罗斯套娃一样一层套一层!


🔧 第一部分:认识条件嵌套

1.1 什么是条件嵌套?

# 条件嵌套基本概念
print("🎯 认识条件嵌套")
print("=" * 50)

print("""
条件嵌套:在if语句内部再写if语句

就像俄罗斯套娃:
    ┌─────────────────────────┐
    │  外层条件判断           │
    │  ┌───────────────────┐  │
    │  │  内层条件判断     │  │
    │  │  ┌─────────────┐  │  │
    │  │  │  更内层判断  │  │  │
    │  │  └─────────────┘  │  │
    │  └───────────────────┘  │
    └─────────────────────────┘
""")

# 简单嵌套示例
print("📝 简单嵌套示例:")
weather = "雨"
have_umbrella = True

if weather == "雨":
    print("🌧️ 下雨了")
    if have_umbrella:
        print("☂️ 我有伞,可以出门")
    else:
        print("🏠 没带伞,等雨停")
else:
    print("☀️ 天气好,出门吧")

print("\n✅ 程序继续执行...")

1.2 嵌套的基本语法

# 嵌套语法详解
print("\n📚 嵌套语法详解")
print("=" * 50)

print("""
📋 嵌套语法格式:

if 外层条件1:
    # 外层条件1为True
    if 内层条件A:
        # 内外条件都满足
        代码块A
    else:
        # 外层满足,内层不满足
        代码块B
else:
    # 外层条件1为False
    if 内层条件C:
        # 外层不满足,内层满足
        代码块C
    else:
        # 内外都不满足
        代码块D

💡 注意:
1. 内层if也要有正确的缩进
2. 每层缩进增加4个空格
3. 不要嵌套太深(一般不超过3层)
""")

# 嵌套层级演示
print("\n🎬 嵌套层级演示:")
print("层级1:检查是否周末")
is_weekend = True
print(f"是周末吗?{is_weekend}")

if is_weekend:
    print("  层级2:检查天气")
    weather = "晴"
    print(f"  天气:{weather}")
    
    if weather == "晴":
        print("    层级3:检查作业")
        homework_done = True
        print(f"    作业做完?{homework_done}")
        
        if homework_done:
            print("      ✅ 出去玩!")
        else:
            print("      📚 先做作业")
    else:
        print("    在家休息")
else:
    print("  去上学")

🔄 第二部分:嵌套的实际应用

2.1 双层嵌套

# 双层嵌套应用
print("🔄 双层嵌套应用")
print("=" * 50)

# 示例1:游乐场门票系统
print("🎡 游乐场门票系统")
print("-" * 30)

age = int(input("请输入年龄:"))
height = float(input("请输入身高(厘米):"))

print(f"\n年龄:{age}岁,身高:{height}厘米")

if age >= 12:
    print("✅ 年龄达标")
    if height >= 140:
        print("🎢 可以玩过山车!")
        print("🎠 可以玩旋转木马!")
        print("🎪 可以玩海盗船!")
    else:
        print("🎠 身高不够,只能玩温和项目")
        print("🎡 可以坐摩天轮")
else:
    print("👶 小朋友专区")
    if height >= 100:
        print("🎠 可以玩旋转木马")
        print("🚂 可以坐小火车")
    else:
        print("🎪 只能在幼儿区玩耍")

# 示例2:超市购物优惠
print("\n🛒 超市购物优惠系统")
print("-" * 30)

total = float(input("购物总金额(元):"))
has_vip_card = input("有会员卡吗?(是/否):")

print(f"\n购物金额:{total}元,会员卡:{has_vip_card}")

if total >= 100:
    print("✅ 满100元,有优惠资格")
    if has_vip_card == "是":
        discount = total * 0.8
        print(f"🎉 VIP会员:打8折!")
        print(f"💵 原价:{total}元")
        print(f"💰 实付:{discount}元")
        print(f"🎁 节省:{total - discount}元")
    else:
        discount = total * 0.9
        print(f"🎉 普通顾客:打9折!")
        print(f"💵 原价:{total}元")
        print(f"💰 实付:{discount}元")
        print(f"🎁 节省:{total - discount}元")
else:
    print("❌ 不满100元,无优惠")
    print(f"💵 需支付:{total}元")

2.2 三层嵌套

# 三层嵌套应用
print("\n🎯 三层嵌套应用")
print("=" * 50)

# 示例:学校活动报名系统
print("🏫 学校活动报名系统")
print("-" * 30)

print("今天学校有运动会、文艺汇演和科技展览")
print("你需要根据条件选择参加的活动\n")

grade = input("你所在的年级(1-6):")
has_talent = input("你有特长吗?(是/否):")
is_healthy = input("你身体健康吗?(是/否):")

print(f"\n年级:{grade}年级")
print(f"有特长:{has_talent}")
print(f"身体健康:{is_healthy}")

print("\n📋 活动推荐:")

if int(grade) >= 4:
    print("✅ 高年级学生")
    
    if has_talent == "是":
        print("✅ 有特长")
        
        if is_healthy == "是":
            print("🎭 推荐:参加文艺汇演表演节目!")
            print("🏃 也可以参加运动会")
            print("🔬 还可以参观科技展览")
        else:
            print("🎭 推荐:参加文艺汇演表演节目!")
            print("📚 不适合剧烈运动")
    else:
        print("❌ 没有特长")
        
        if is_healthy == "是":
            print("🏃 推荐:参加运动会!")
            print("🔬 也可以参观科技展览")
        else:
            print("🔬 推荐:参观科技展览")
            print("📚 适合安静的活动")
else:
    print("👶 低年级学生")
    
    if has_talent == "是":
        print("✅ 有特长")
        
        if is_healthy == "是":
            print("🎭 推荐:参加文艺汇演!")
            print("🏃 也可以参加趣味运动会")
        else:
            print("🎭 推荐:参加文艺汇演!")
            print("🎨 适合展示才艺")
    else:
        print("❌ 没有特长")
        
        if is_healthy == "是":
            print("🏃 推荐:参加趣味运动会!")
            print("🎪 有很多好玩的游戏")
        else:
            print("🔬 推荐:参观科技展览")
            print("🎨 也有很多有趣的展示")

🎮 第三部分:嵌套实战练习

3.1 交互式嵌套练习

# 交互式嵌套练习
print("🎮 交互式嵌套练习")
print("=" * 50)

# 练习1:早餐选择器
print("练习1:智能早餐选择器")
print("-" * 30)

time = input("现在几点?(输入小时,如7、8、9):")
hungry = input("你饿吗?(是/否):")
has_milk = input("家里有牛奶吗?(是/否):")

print(f"\n⏰ {time}点,饿了:{hungry},有牛奶:{has_milk}")

if int(time) <= 8:
    print("🕗 还早,可以慢慢准备")
    if hungry == "是":
        print("🍳 做个丰盛早餐")
        if has_milk == "是":
            print("🥛 牛奶配面包,完美!")
        else:
            print("🥪 喝点水,吃三明治")
    else:
        print("🥣 简单吃点就好")
        if has_milk == "是":
            print("🥛 喝杯牛奶")
        else:
            print("🍎 吃个水果")
else:
    print("🕘 来不及了,简单解决")
    if hungry == "是":
        print("🥐 带个面包路上吃")
        if has_milk == "是":
            print("🥛 带上牛奶")
        else:
            print("🧃 买瓶饮料")
    else:
        print("⏰ 赶时间,到学校再吃")

# 练习2:周末活动规划
print("\n练习2:周末活动规划")
print("-" * 30)

weather = input("周末天气如何?(晴/雨/阴):")
money = input("你有零花钱吗?(有/没有):")
friend = input("朋友有空吗?(有/没有):")

print(f"\n天气:{weather},零花钱:{money},朋友:{friend}")

if weather == "晴":
    print("☀️ 天气好,适合外出")
    if money == "有":
        print("💰 有钱花")
        if friend == "有":
            print("🎮 和朋友去游乐场!")
            print("🍦 一起吃冰淇淋")
        else:
            print("🛍️ 自己去逛街")
            print("📚 买本书看看")
    else:
        print("💸 没钱")
        if friend == "有":
            print("🏃 和朋友去公园跑步")
            print("⚽ 免费的运动也很开心")
        else:
            print("🚶 一个人去散步")
            print("🌳 呼吸新鲜空气")
elif weather == "雨":
    print("🌧️ 下雨天")
    if money == "有":
        print("💰 有钱")
        if friend == "有":
            print("🎬 和朋友去看电影!")
            print("🍿 买爆米花")
        else:
            print("📖 去书店看书")
            print("☕ 顺便喝杯咖啡")
    else:
        print("💸 没钱")
        if friend == "有":
            print("🏠 邀请朋友来家里玩")
            print("🎲 一起玩游戏")
        else:
            print("💻 在家上网")
            print("📺 看看电视")
else:
    print("☁️ 阴天")
    print("🎯 适合室内活动")
    if money == "有":
        if friend == "有":
            print("🎳 去打保龄球!")
        else:
            print("🎨 去美术馆")
    else:
        if friend == "有":
            print("🏠 在家一起做饭")
        else:
            print("📚 在家学习")

3.2 嵌套迷宫游戏

# 嵌套迷宫游戏
print("\n🧩 嵌套迷宫游戏")
print("=" * 50)

print("欢迎来到嵌套迷宫!")
print("这是一个需要层层判断的冒险游戏。")
print("每个选择都会影响后面的道路。\n")

print("🏰 你站在一座城堡门前...")
door_open = input("门是开着的吗?(是/否):")

if door_open == "是":
    print("\n🚪 你走进城堡大厅...")
    print("大厅里有三个通道:左、中、右")
    channel = input("选择通道(左/中/右):")
    
    if channel == "左":
        print("\n🔦 你走进左边的通道...")
        print("通道尽头有一扇门")
        has_key = input("你有钥匙吗?(是/否):")
        
        if has_key == "是":
            print("\n🔑 你用钥匙打开了门!")
            print("房间里全是金银财宝!")
            print("🎉 恭喜你找到了宝藏!")
        else:
            print("\n🚫 门锁着,你没有钥匙")
            print("你只能原路返回...")
            print("😔 探险失败")
    
    elif channel == "中":
        print("\n🌉 你走上中间的通道...")
        print("前面有一座吊桥,下面是深渊")
        bridge_safe = input("吊桥看起来安全吗?(是/否):")
        
        if bridge_safe == "是":
            print("\n🚶 你小心翼翼地走过吊桥...")
            print("对面是一个美丽的花园!")
            print("🌸 你在花园里愉快地游玩")
        else:
            print("\n😰 吊桥摇摇晃晃,很危险")
            print("你决定不过去了...")
            print("你找到了一条小路绕了过去")
            print("🌿 虽然辛苦,但安全到达")
    
    elif channel == "右":
        print("\n🪜 你走进右边的通道...")
        print("这是一个螺旋楼梯")
        go_up = input("往上走还是往下走?(上/下):")
        
        if go_up == "上":
            print("\n🏔️ 你爬到塔顶!")
            print("风景太美了!")
            see_treasure = input("你看到远处有闪光,去看看吗?(是/否):")
            
            if see_treasure == "是":
                print("💎 你找到了隐藏的宝石!")
                print("🎉 冒险成功!")
            else:
                print("😴 你在塔顶休息了一会儿就下去了")
                print("虽然没有找到宝藏,但看到了美景")
        else:
            print("\n🕳️ 你走下楼梯...")
            print("地下室黑漆漆的")
            have_torch = input("你有手电筒吗?(是/否):")
            
            if have_torch == "是":
                print("🔦 你照亮了地下室")
                print("发现了一个秘密通道!")
                print("🎉 你找到了出口!")
            else:
                print("🌑 太黑了,什么都看不见")
                print("你只好摸索着回去了")
    
    else:
        print("❌ 无效的选择,你迷路了...")
else:
    print("\n🚫 门关着,你进不去")
    try_again = input("要试着推一下吗?(是/否):")
    
    if try_again == "是":
        print("💪 你用力推门...")
        door_opens = input("门开了吗?(是/否):")
        
        if door_opens == "是":
            print("🎉 门开了!你成功进入城堡!")
            print("虽然耽误了一些时间,但总算进来了")
        else:
            print("😤 门纹丝不动")
            print("看来今天不适合探险...")
    else:
        print("🏠 你决定回家了")
        print("也许下次再来探险吧")

print("\n🎬 冒险结束!谢谢游玩!")

📊 第四部分:嵌套优化技巧

4.1 避免过度嵌套

# 避免过度嵌套
print("📊 嵌套优化技巧")
print("=" * 50)

print("""
⚠️ 嵌套太深的危害:
1. 代码难以阅读
2. 容易出错
3. 难以维护
4. 逻辑混乱

💡 优化原则:
1. 嵌套不超过3层
2. 能用elif不用嵌套
3. 提前返回减少嵌套
4. 合并条件简化逻辑
""")

# 不好的写法:嵌套太深
print("❌ 不好的写法(嵌套太深):")
score = 85
attendance = 95
behavior = "好"

if score >= 60:
    if attendance >= 80:
        if behavior == "好":
            print("优秀学生")
        else:
            print("需要改进行为")
    else:
        print("出勤不足")
else:
    print("成绩不及格")

# 好的写法:使用逻辑运算符
print("\n✅ 好的写法(使用逻辑运算符):")
score = 85
attendance = 95
behavior = "好"

if score >= 60 and attendance >= 80 and behavior == "好":
    print("优秀学生")
elif score >= 60 and attendance >= 80:
    print("成绩和出勤达标,但行为需改进")
elif score >= 60:
    print("成绩达标,但出勤不足")
else:
    print("成绩不及格")

4.2 嵌套优化实例

# 嵌套优化实例
print("\n🎯 嵌套优化实例")
print("=" * 50)

# 原始版本:多层嵌套
print("原始版本(多层嵌套):")
def check_student_v1(score, attendance, homework):
    if score >= 60:
        if attendance >= 80:
            if homework >= 80:
                print("优秀学生")
            else:
                print("作业需改进")
        else:
            print("出勤不足")
    else:
        print("成绩不及格")

check_student_v1(85, 90, 70)

# 优化版本1:提前返回
print("\n优化版本1(提前返回):")
def check_student_v2(score, attendance, homework):
    if score < 60:
        print("成绩不及格")
        return
    
    if attendance < 80:
        print("出勤不足")
        return
    
    if homework < 80:
        print("作业需改进")
        return
    
    print("优秀学生")

check_student_v2(85, 90, 70)

# 优化版本2:合并条件
print("\n优化版本2(合并条件):")
def check_student_v3(score, attendance, homework):
    if score >= 60 and attendance >= 80 and homework >= 80:
        print("优秀学生")
    elif score >= 60 and attendance >= 80:
        print("作业需改进")
    elif score >= 60:
        print("出勤不足")
    else:
        print("成绩不及格")

check_student_v3(85, 90, 70)

# 对比三种写法
print("\n📊 三种写法对比:")
print("1. 多层嵌套:逻辑清晰但代码冗长")
print("2. 提前返回:简洁高效,推荐使用")
print("3. 合并条件:最简单,适合简单逻辑")

🎯 第五部分:综合练习

5.1 嵌套逻辑题

# 嵌套逻辑题
print("\n🧠 嵌套逻辑题")
print("=" * 50)

print("请判断以下代码的输出结果:")

# 题目1
print("\n📝 题目1:")
code1 = '''
x = 10
y = 5
if x > 5:
    if y > 3:
        print("A")
    else:
        print("B")
else:
    if y > 3:
        print("C")
    else:
        print("D")
'''
print(code1)

answer = input("输出结果是? (A/B/C/D): ")
if answer.upper() == "A":
    print("✅ 正确!x>5且y>3,所以输出A")
else:
    print("❌ 错误,应该是A")

# 题目2
print("\n📝 题目2:")
code2 = '''
num = 15
if num > 20:
    print("大")
elif num > 10:
    if num > 15:
        print("中大")
    else:
        print("中小")
else:
    print("小")
'''
print(code2)

answer = input("输出结果是? (大/中大/中小/小): ")
if answer == "中小":
    print("✅ 正确!10<num<=15,输出中小")
else:
    print("❌ 错误,应该是中小")

# 题目3
print("\n📝 题目3:")
code3 = '''
a = 3
b = 5
c = 7

if a < b:
    if a < c:
        print("a最小")
    else:
        print("c最小")
else:
    if b < c:
        print("b最小")
    else:
        print("c最小")
'''
print(code3)

answer = input("输出结果是? (a最小/b最小/c最小): ")
if answer == "a最小":
    print("✅ 正确!a=3最小")
else:
    print("❌ 错误,应该是a最小")

5.2 代码补全练习

# 代码补全练习
print("\n🔧 代码补全练习")
print("=" * 50)

print("请补全以下代码:")

# 练习1:四季推荐活动
print("\n练习1:四季推荐活动")
print("""
# 根据季节和天气推荐活动
season = input("现在是哪个季节?(春/夏/秋/冬):")
weather = input("今天天气如何?(晴/雨):")

if season == "春":
    _______:  # 填空1
        print("🌸 春天赏花去!")
    else:
        print("📚 春雨绵绵,在家看书")
______ season == "夏":  # 填空2
    if weather == "晴":
        ___________  # 填空3
    else:
        print("🏊 下雨天,去游泳馆")
______ season == "秋":  # 填空4
    if weather == "晴":
        print("🍁 秋天爬山赏红叶")
    ______:  # 填空5
        print("☕ 秋雨凉,喝杯热茶")
______:  # 填空6
    if weather == "晴":
        print("⛷️ 冬天滑雪去!")
    else:
        print("🏠 下雪天,堆雪人!")
""")

input("按回车查看答案...")
print("✅ 答案:")
print("  填空1:if weather == '晴'")
print("  填空2:elif")
print("  填空3:print('🏊 夏天游泳去!')")
print("  填空4:elif")
print("  填空5:else")
print("  填空6:else")

📅 下节课预告

第25课:成绩评定系统——根据分数判断等级

下节课你将学习:

  1. 综合运用条件判断知识
  2. 制作完整的成绩评定系统
  3. 处理多种评分标准
  4. 添加详细的评语和建议
  5. 制作可复用的评定函数

预习思考

  1. 如何设计合理的评分等级?
  2. 除了分数,还需要考虑什么因素?
  3. 如何给出有针对性的学习建议?

💬 给家长的话

亲爱的家长

今天孩子学习了条件嵌套,这是在条件判断内部再进行判断的高级技巧。这是编程中处理复杂逻辑的重要方法。

孩子今天学会了

  1. ✅ 理解条件嵌套的概念
  2. ✅ 掌握多层嵌套的语法
  3. ✅ 处理需要层层判断的场景
  4. ✅ 优化嵌套结构避免过深
  5. ✅ 在实际问题中应用嵌套

条件嵌套的重要性

| 概念 | 在编程中的应用 | 实际意义 | 思维培养 |

|------|---------------|---------|---------|

| 嵌套逻辑 | 处理复杂决策 | 分层思维 | 结构化思考 |

| 层级管理 | 控制嵌套深度 | 简洁性 | 优化思维 |

| 条件合并 | 简化嵌套结构 | 效率 | 抽象思维 |

| 提前返回 | 减少嵌套层级 | 可读性 | 工程思维 |

您可以这样做

生活应用

  1. 决策分析:用嵌套思维分析复杂决策
  2. 问题分解:把大问题拆成小问题
  3. 层级分类:对事物进行多层分类
  4. 规则制定:设计有层次的规则

思维训练

  1. 讨论:什么时候需要用嵌套?
  2. 思考:如何简化复杂的判断?
  3. 实践:设计一个多层决策系统
  4. 改进:优化现有的嵌套结构

温馨提示

  • 嵌套是强大的工具,但要适度使用
  • 3层以上的嵌套要考虑优化
  • 鼓励孩子思考更简洁的写法
  • 通过实际应用加深理解

🏆 今日成就

完成了今天的学习,你:

🎯 掌握了条件嵌套

🔄 理解了多层判断

🧩 学会了优化嵌套

🤔 培养了分层思维

🔧 解决了复杂问题

挑战任务

  1. 设计多层活动推荐系统
  2. 制作嵌套迷宫游戏
  3. 优化现有的嵌套代码
  4. 创建分层决策工具

🌟 编程心法