第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

本集小结

  1. 循环嵌套是指在一个循环中再包含另一个循环
  2. 外层循环每执行一次,内层循环完整执行一轮
  3. 总执行次数 = 外层次数 × 内层次数
  4. 嵌套循环常用于多维数据的处理
  5. 打印图形、矩阵运算、二维列表遍历等都需要嵌套循环
  6. break和continue在嵌套循环中只影响当前层级
  7. 嵌套层数不宜过多,通常不超过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集:综合练习-猜数字游戏。这是一个完整的实战项目,将综合运用前面学到的所有知识:条件语句、循环、输入输出等。

敬请期待!

« 上一篇 循环控制break和continue 下一篇 » 综合练习猜数字游戏