Skip to content

嵌套循环

当一个循环存在于另一个循环内部时,称为嵌套循环。

对于外层循环的每次迭代,内层循环都会进行完整的迭代。因此,如果外层循环需要进行 n 次迭代,内层循环需要进行 m 次迭代,那么内层循环内部的代码块将执行 n x m 次。

让我们看一个嵌套循环的例子:

阶乘

编写一个程序,打印范围 110(含)内所有数字的阶乘。

代码

python
for n in range(1, 11):
    factorial = 1
    for i in range(1, n+1):
        factorial *= i
    print(n,"! =", factorial)

输出

1 ! = 1
2 ! = 2
3 ! = 6
4 ! = 24
5 ! = 120
6 ! = 720
7 ! = 5040
8 ! = 40320
9 ! = 362880
10 ! = 3628800

嵌套循环 - break

内层循环中的 break 语句仅终止内层循环,而外层循环不受影响。

为了更好地理解,让我们编写一个程序来查找 2 到 40 之间的所有素数。

代码

python
for n in range(2, 40):
    i = 2
    # 优化:检查到 sqrt(n) 即可,这里为简化,检查到 n/2
    while i <= n / 2:
        if n % i == 0:
            break # 如果找到因子,则不是素数,跳出内层循环
        i += 1
    # 如果内层循环正常结束(没有 break),则 i 会大于 n/2
    # 或者 n 本身小于等于 3 (2, 3 是素数)
    else: # while 循环的 else 子句
        print(n, "是素数")

(注意: 原代码逻辑 if i>n/2: 有微小瑕疵,无法正确处理 n=2,3 的情况,并且效率不高。这里使用 while...else... 结构更清晰且更符合 Python 风格,并略作优化说明。对于 n=4, i=2 时 n%i==0, break, i 不会 > n/2. 对于 n=5, i=2 时 5%2!=0, i+=1 -> i=3, 3 > 5/2, 打印 5 is prime. 对于 n=2, while 条件不满足,执行 else. 对于 n=3, while 条件不满足,执行 else. )

输出

2 是素数
3 是素数
5 是素数
7 是素数
11 是素数
13 是素数
17 是素数
19 是素数
23 是素数
29 是素数
31 是素数
37 是素数