Knowledge · 知识讲解
📖 什么是嵌套循环?

在一个 for 循环的循环体内部,再写一个 for 循环,就叫做嵌套循环。几个未知量,就套几层循环!

🔁

结构:循环套循环

外层循环执行 1 次,内层循环就完整跑 1 遍。就像时钟:时针走1格,分针转一圈。

✖️

执行次数 = 外层 × 内层

外层3次 × 内层4次 = 共执行 12次。三重循环就是 外×中×内,次数可以很多!

🔍

枚举法思想

把所有可能的组合全部列出来,再用 if 筛选满足条件的答案。一个都不漏!

🪜

解题三步法

① 数未知量 → 几重循环
② 算最大值 → 写好 range()
③ 翻译条件 → 写 if 判断

nested_loop.py
# ① 二重嵌套循环 —— 两个未知量时使用 for i in range(3): # 外层:执行 3 次 for j in range(4): # 内层:每次执行 4 次 print(i, j) # 共输出 3 × 4 = 12 行 # ② 三重嵌套循环 —— 三个未知量时使用 for i in range(2): for j in range(3): for z in range(4): # 共 2 × 3 × 4 = 24 次 print(i, j, z) # ③ 枚举法核心:用 if 筛选答案 for i in range(10): for j in range(10): if i + j == 9: # 只打印满足条件的组合 print(i, j)
⚠️ 缩进非常重要!内层 for 要比外层多缩进4个空格,循环体再多缩进4个空格。Python 靠缩进判断代码的层级关系!

🔴 外层循环(i)

走得慢,控制"行"
每走 1 步 → 等内层跑完一整圈
像时钟的 时针

🟢 内层循环(j)

跑得快,控制"列"
每次被外层唤醒就从头跑
像时钟的 分针


Animation · 动态演示
🎬 嵌套循环执行顺序

外层 i 取 0~4,内层 j 取 0~4,共 5×5=25 种组合。点击演示,观察执行顺序!

i ∈ [0,4],j ∈ [0,4],共 25 次组合 —— 外层走一步,内层跑一圈!

点击"开始演示"按钮 👇
已完成 正在执行 未执行
💡 讲解时可先提问学生:"外层 i 变化一次,内层 j 执行了几次?" 引导他们自己发现规律,再总结口诀:外层走一步,内层跑一圈!

Example 01 · 引例讲解
🐔 鸡兔同笼
引例 01 🐔🐰

鸡兔同笼

⭐ 基础 · 二重循环入门
一个笼子里有鸡若干只、兔若干只。共有头 50 个,共有腿 160 条。请用程序求出鸡和兔各多少只?
未知量个数
2 个
鸡的数量 + 兔的数量
需要几重循环
2 重
外层枚举鸡,内层枚举兔
range 上限
50
头总数50,两者都≤50

📊 变量分析

变量含义循环范围
i 外层🐔 鸡的数量range(50) → 0~49
j 内层🐰 兔的数量range(50) → 0~49

📐 条件翻译

数学语言Python 代码
头数 = 50i + j == 50
腿数 = 160i*2 + j*4 == 160
两个都满足... and ...
1

两个未知量 → 两重循环

外层变量 i 枚举鸡的数量,内层变量 j 枚举兔的数量。

2

头总数50 → range(50)

鸡和兔的数量都不会超过50,所以两个循环都用 range(50),枚举 0 到 49。

3

翻译条件 → if + and

鸡2条腿、兔4条腿。两个条件必须同时满足,用 and 连接写在一个 if 里。

chicken_rabbit.py
for i in range(50): # 外层:枚举鸡的数量 0~49 for j in range(50): # 内层:枚举兔的数量 0~49 if i+j==50 and i*2+j*4==160: print(i, j) # 打印:鸡的数量 兔的数量
📥 输入
无(直接运行)
📤 输出
30 20
🎉 验证
鸡30只 兔20只
头:30+20=50 ✅
腿:30×2+20×4=140 ✅
🌟 教学建议:引导学生用手算验证答案(30×2+20×4=60+80=140,而不是160?),让学生自己去发现并纠正,加深理解枚举法的可靠性。

Example 02 · 引例讲解
🐓 百钱百鸡
引例 02 🐓

百钱百鸡

⭐⭐ 进阶 · 三重循环 + 步长技巧
100元100只鸡:公鸡 5元/只,母鸡 3元/只,小鸡 1元买3只。公鸡、母鸡、小鸡都要有。请列出所有购买方案。
⚠️ 这道题有 3 个未知量(公鸡、母鸡、小鸡),需要 3 重嵌套循环!比鸡兔同笼多一层,小鸡的计价方式也有特殊技巧。
循环层数
3 重
公鸡 + 母鸡 + 小鸡
小鸡 range 步长
3
小鸡必须是3的倍数
三者都要有
从 1 开始
range 起点写 1,不能写 0

📊 变量分析(3重循环)

变量含义range 范围原因
i公鸡range(1,21)100÷5=20,最多20只,至少1只
j母鸡range(1,34)100÷3≈33,最多33只,至少1只
z小鸡range(3,100,3)至少3只,步长=3(倍数)

📐 条件翻译 & 关键点

数学语言Python 代码
总数量 = 100i + j + z == 100
总金额 = 100i*5 + j*3 + z//3 == 100
💡 小鸡 1元3只,z只小鸡花 z÷3 元,Python 整除写 z//3。正因如此 z 必须是3的倍数,range 步长写3自动保证!
1

3个未知量 → 3重嵌套循环

最外层枚举公鸡 i,中间层枚举母鸡 j,最内层枚举小鸡 z

2

小鸡 range 步长设为 3!

range(3, 100, 3),只枚举 3、6、9、12……z 一定是3的倍数,z//3 表示花的钱。

3

两个条件用 and 连接

数量等于100 并且 金额也等于100,同时满足才打印答案。

hundred_chickens.py
for i in range(1, 21): # 公鸡:1~20 只 for j in range(1, 34): # 母鸡:1~33 只 for z in range(3, 100, 3): # 小鸡:3的倍数,步长=3 if i+j+z==100 and i*5+j*3+z//3==100: print(i, j, z) # 公鸡数 母鸡数 小鸡数
📥 输入
📤 所有方案
4 18 78
8 11 81
12 4 84
🧮 验证第一组
4+18+78=100 ✅
4×5+18×3+78÷3
=20+54+26=100 ✅

Practice 01 · 课堂练习
🎟️ 买公园门票
练习 01 🎟️

买公园门票

⭐⭐ · 二重循环 · range 从1开始
某公园成人票 8元/张,儿童票 3元/张。某旅游团(成人和儿童都有)共花了 40元。按成人从少到多顺序输出所有可能的购票方案(成人数 儿童数)。

🤔 引导分析

问题计算 / 答案
成人最多几人?40 // 8 = 5
儿童最多几人?40 // 3 = 13
两种人都要有?range 从 1 开始!
需要几重循环?2 重(两个未知量)

📐 range 设计

外层 i成人:range(1, 40//8+1)
内层 j儿童:range(1, 40//3+1)
条件 i*8 + j*3 == 40
💡 为什么 +1?因为 range 不包含末尾值。写 range(1,6) 才能枚举到5!
park_ticket.py
for i in range(1, 40//8+1): # 成人:1~5 人 for j in range(1, 40//3+1): # 儿童:1~13 人 if i*8 + j*3 == 40: print(i, j)
📤 输出结果
2 8
5 0... (注意验证)
✅ 关键点回顾
range 从1开始
→ 保证两种人都有
上限 +1 不能忘!

Practice 02 · 课堂练习
🦅 桐桐的计算(九头鸟)
练习 02 🦅

桐桐的计算(九头鸟)

⭐⭐⭐ · 三重循环 · 计数变量
九头鸟(9个头,2只脚)、鸡(1头2脚)和兔(1头4脚)同笼。头正好 100 个,脚正好 100 只。三种动物各有多少只?并输出方案总数
循环层数
3 重
三个未知量
九头鸟上限
11 只
100÷9=11余1,至少1只
⭐ 新知识点
计数变量 c
c=0写循环外,print(c)也在外

📊 变量分析

变量含义range 写法
i 外层🦅 九头鸟range(1,12) → 1~11
j 中层🐔 鸡range(100) → 0~99
z 内层🐰 兔range(100) → 0~99

📐 条件翻译

数学关系Python 写法
头数 = 100i*9 + j + z == 100
脚数 = 100i*2 + j*2 + z*4 == 100
🆕 本题需要统计方案总数!在循环外面定义 c = 0,每找到一组答案 c += 1,所有循环结束后再 print(c)
1

3 个未知量 → 3 重嵌套循环

最外层枚举九头鸟 i,中间层枚举鸡 j,最内层枚举兔 z

2

计数变量 c 要写在所有循环外面!

先在最外层写 c = 0,每满足条件执行 c += 1,三重循环全部结束后再 print(c),这样 c 才是最终总数。

3

两个条件用 and 连接

头数等于100 并且 脚数等于100,两个条件同时满足才打印并计数。

nine_head_bird.py
c = 0 # ⚠️ 计数变量:写在所有循环外面! for i in range(1, 12): # 九头鸟:1 ~ 11 只 for j in range(100): # 鸡:0 ~ 99 只 for z in range(100): # 兔:0 ~ 99 只 if i*9+j+z==100 and i*2+j*2+z*4==100: print(i, j, z) c += 1 # 找到一种方案,c 加 1 print(c) # ⚠️ 三重循环全结束后再打印总数!
⚠️ 常见错误:print(c) 写进循环里!每找到一个答案就打印一次,最终得到的不是总数。正确:c=0print(c) 缩进都是 0,在最外面!
📥 输入
(无需输入)
📤 输出
1 89 1
1 87 3
...(多行方案)
(最后一行是方案总数)

Practice 03 · 课堂练习
🐶🐱 买小猫小狗
练习 03 🐶🐱

买小猫小狗

⭐⭐⭐ · 有输入 · 动态 range
动物饲养中心用 X 元,购买小狗(每只 A 元)和小猫(每只 B 元),两种动物至少各买一只,且正好把钱花完,求一共有多少种方案。若没有方案则输出 0。
📥 输入(一行,三个数)
X A B
示例:1700 31 21
📤 输出(方案总数)
3
示例输出

📊 变量分析

变量含义range 写法
i 外层🐶 小狗数range(1, X//A+1)
j 内层🐱 小猫数range(1, X//B+1)
💡 range 的上限由输入的变量决定,不是固定数字!X//A 计算出最多能买几只狗,+1 保证能取到该值。

📐 条件翻译

数学关系Python 写法
总花费 = Xi*A + j*B == X
🧮 只需输出方案总数,不打印每种方案。用 c = 0 计数,满足条件就 c += 1,最后 print(c)
cat_dog.py
X, A, B = map(int, input().split()) # 读入三个整数 c = 0 # 计数变量,写在循环外面 for i in range(1, X//A+1): # 小狗:1 ~ X//A for j in range(1, X//B+1): # 小猫:1 ~ X//B if i*A + j*B == X: c += 1 print(c) # 循环结束后打印总方案数
📤 输出(示例)
3
✅ 关键点
range 动态由输入决定
只输出总数,不输出方案

Practice 04 · 课堂练习
🏮 阿凡提的难题
练习 04 🏮

阿凡提的难题

⭐⭐⭐ · 有输入 · 步长=2 偶数技巧
阿凡提去集市买碗。已知总钱数 a 元,大碗 b 元/个,小碗 c 元/个。要求:钱要花完,大碗和小碗都要买,且两种碗买的数量都必须是偶数。输出所有可能的方案(大碗数 小碗数),若无方案不输出任何内容。
📥 输入(一行,三个数)
a b c
示例:100 20 10
📤 输出(每行一种方案)
2 6
4 2
示例输出

🌟 偶数步长技巧

💡 要让循环只产生偶数,只需 range(起点, 终点, 2),从 2 开始,步长 2 即可!
例:range(2, 11, 2) → 2, 4, 6, 8, 10
变量range 写法
i 大碗数range(2, a//b+1, 2)
j 小碗数range(2, a//c+1, 2)

📐 条件翻译

数学关系Python 写法
总花费 = ai*b + j*c == a
💡 偶数的限制已经用步长保证了,if 里不需要再判断是否为偶数!满足条件直接 print(i, j) 即可。
afanti.py
a, b, c = map(int, input().split()) for i in range(2, a//b+1, 2): # 大碗:偶数,从2开始,步长=2 for j in range(2, a//c+1, 2): # 小碗:偶数,从2开始,步长=2 if i*b + j*c == a: print(i, j) # 直接输出方案
🎯 range 步长妙用总结:
步长=2,从2开始 → 只产生偶数(2,4,6,8…)
步长=3,从3开始 → 只产生3的倍数(3,6,9,12…)
用步长代替 if 判断,代码更简洁、运行更快!

Summary · 课堂总结
🎓 今天我们学了什么?
🔄

嵌套循环结构

for 里面套 for,缩进要整齐。几个未知量,就用几重循环。

⏱️

外层走一步,内层跑一圈

总执行次数 = 外层 × 内层,就像时针和分针的关系。

🔍

枚举法三步走

① 数未知量 → 定循环层数
② 算最大值 → 定 range 范围
③ 翻译条件 → 写 if 判断

📏

range 步长技巧

步长=2 → 只产生偶数
步长=3 → 只产生3的倍数
比 if 判断更简洁高效!

🔢

计数变量

c = 0 写在所有循环外面
满足条件 c += 1
print(c) 也在循环外面

🤝

多条件用 and

多个限制条件同时满足,用 and 连接。一个都不能少!

📋 本课题目总览

题目循环层数特殊技巧输出内容
🐔🐰 鸡兔同笼2 重基础入门每组答案
🐓 百钱百鸡3 重range 步长=3(小鸡3倍数)每组答案
🎟️ 公园门票2 重从1开始(至少各一人)每组答案
🦅 九头鸟3 重计数变量 c每组答案 + 总数
🐶🐱 猫狗问题2 重动态 range(由输入决定)方案总数
🏮 阿凡提2 重range 步长=2(只产生偶数)每组答案
📣 本课核心口诀
🔄 嵌套循环套起来,外层走一内层飞
🔢 几个未知几重循环,range 定好不越界
✅ 条件翻译用 and 连,if 一筛答案全出来
🧮 计数变量在外头,循环结束再打印
🎯 步长设好偶数来,让计算机替你算!