第18集:循环嵌套
本集学习目标
- 理解什么是循环嵌套
- 掌握嵌套循环的执行流程
- 学会使用嵌套循环解决实际问题
- 理解外层循环和内层循环的关系
- 掌握常见的嵌套循环应用场景
什么是循环嵌套?
循环嵌套是指在一个循环中再包含另一个循环。就像俄罗斯套娃,一个套一个。
生活中的类比
- 打印乘法表:外层循环控制行,内层循环控制列
- 日历:外层循环控制月份,内层循环控制天数
- 图像处理:外层循环控制行,内层循环控制列
基本结构
for 外层变量 in 外层序列:
for 内层变量 in 内层序列:
# 内层循环的代码
代码
# 外层循环的代码
代码基本示例
示例1:简单的嵌套循环
for i in range(3): # 外层循环:执行3次
print(f"外层循环 i = {i}")
for j in range(2): # 内层循环:执行2次
print(f" 内层循环 j = {j}")
print("内层循环结束\n")输出:
外层循环 i = 0
内层循环 j = 0
内层循环 j = 1
内层循环结束
外层循环 i = 1
内层循环 j = 0
内层循环 j = 1
内层循环结束
外层循环 i = 2
内层循环 j = 0
内层循环 j = 1
内层循环结束执行次数:外层3次 × 内层2次 = 总共6次
示例2:打印星号矩形
for i in range(3): # 3行
for j in range(5): # 5列
print("*", end=' ')
print() # 换行输出:
* * * * *
* * * * *
* * * * *示例3:打印数字矩阵
for i in range(1, 4):
for j in range(1, 4):
print(f"{i}×{j}={i*j}", end=' ')
print()输出:
1×1=1 1×2=2 1×3=3
2×1=2 2×2=4 2×3=6
3×1=3 3×2=6 3×3=9九九乘法表
示例4:完整的九九乘法表
for i in range(1, 10): # 外层:行(1-9)
for j in range(1, i + 1): # 内层:列(1-i)
print(f"{j}×{i}={i*j}", end=' ')
print() # 换行输出:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81打印图形
示例5:打印直角三角形
# 打印直角三角形
for i in range(1, 6):
for j in range(i):
print("*", end=' ')
print()输出:
*
* *
* * *
* * * *
* * * * *示例6:打印等腰三角形
# 打印等腰三角形
for i in range(1, 6):
# 打印空格
for j in range(5 - i):
print(" ", end='')
# 打印星号
for j in range(2 * i - 1):
print("*", end='')
print()输出:
*
***
*****
*******
*********示例7:打印金字塔(数字)
# 打印数字金字塔
for i in range(1, 6):
# 打印空格
for j in range(5 - i):
print(" ", end=' ')
# 打印数字
for j in range(i):
print(f"{i} ", end='')
print()输出:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5嵌套循环与数据结构
示例8:遍历二维列表
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(matrix[i][j], end=' ')
print()输出:
1 2 3
4 5 6
7 8 9示例9:查找二维列表中的元素
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
target = 5
found = False
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] == target:
print(f"找到{target},位置:({i}, {j})")
found = True
break
if found:
break
if not found:
print(f"未找到{target}")输出:
找到5,位置:(1, 1)实际应用案例
案例1:学生成绩统计
students = {
"张三": [85, 92, 78],
"李四": [90, 88, 95],
"王五": [76, 85, 82]
}
# 计算每个学生的平均分
for name, scores in students.items():
total = 0
for score in scores:
total += score
average = total / len(scores)
print(f"{name}的平均分:{average:.2f}")输出:
张三的平均分:85.00
李四的平均分:91.00
王五的平均分:81.00案例2:查找所有满足条件的元素
numbers = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 找出所有偶数
print("所有偶数:")
for i in range(len(numbers)):
for j in range(len(numbers[i])):
if numbers[i][j] % 2 == 0:
print(f" 找到偶数:{numbers[i][j]},位置:({i}, {j})")输出:
所有偶数:
找到偶数:2,位置:(0, 1)
找到偶数:4,位置:(1, 0)
找到偶数:6,位置:(1, 2)
找到偶数:8,位置:(2, 1)案例3:矩阵加法
matrix_a = [
[1, 2, 3],
[4, 5, 6]
]
matrix_b = [
[7, 8, 9],
[10, 11, 12]
]
# 矩阵加法
result = []
for i in range(len(matrix_a)):
row = []
for j in range(len(matrix_a[i])):
row.append(matrix_a[i][j] + matrix_b[i][j])
result.append(row)
# 打印结果
print("矩阵加法结果:")
for row in result:
print(row)输出:
矩阵加法结果:
[8, 10, 12]
[14, 16, 18]嵌套循环的执行次数
计算执行次数
嵌套循环的总执行次数 = 外层循环次数 × 内层循环次数
示例10:计算执行次数
count = 0
for i in range(3): # 外层:3次
for j in range(4): # 内层:4次
for k in range(2): # 再内层:2次
count += 1
print(f"总执行次数:{count}") # 3 × 4 × 2 = 24输出:
总执行次数:24本集小结
- 循环嵌套是指在一个循环中再包含另一个循环
- 外层循环每执行一次,内层循环完整执行一轮
- 总执行次数 = 外层次数 × 内层次数
- 嵌套循环常用于多维数据的处理
- 打印图形、矩阵运算、二维列表遍历等都需要嵌套循环
- break和continue在嵌套循环中只影响当前层级
- 嵌套层数不宜过多,通常不超过3层
课后练习
练习1:打印星号矩形
打印一个5行10列的星号矩形。
# 你的代码在这里练习2:打印等腰三角形
打印一个5行的等腰三角形。
# 你的代码在这里练习3:遍历二维列表
给定一个二维列表,计算所有元素的和。
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 计算总和练习4:查找最大值
在二维列表中查找最大值及其位置。
matrix = [
[1, 2, 3],
[9, 5, 6],
[7, 8, 4]
]
# 找出最大值及其位置练习5:转置矩阵
将矩阵转置(行变列,列变行)。
matrix = [
[1, 2, 3],
[4, 5, 6]
]
# 转置矩阵下集预告
下一集我们将学习第19集:综合练习-猜数字游戏。这是一个完整的实战项目,将综合运用前面学到的所有知识:条件语句、循环、输入输出等。
敬请期待!