嵌套循环
当一个循环存在于另一个循环内部时,称为嵌套循环。
对于外层循环的每次迭代,内层循环都会进行完整的迭代。因此,如果外层循环需要进行 n
次迭代,内层循环需要进行 m
次迭代,那么内层循环内部的代码块将执行 n x m
次。
让我们看一个嵌套循环的例子:
阶乘
编写一个程序,打印范围 1
到 10
(含)内所有数字的阶乘。
代码
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 是素数