Skip to content

Python 循环:从"重复劳动"到"自动化流水线"

引言:为什么需要循环?

想象你是一个工厂质检员,要检查 10000 个产品。如果每个产品都要手动记录:"检查产品1,检查产品2,检查产品3...",你会写到手软。

更好的办法是:制定一个检查流程,然后重复执行 10000 次

在编程世界里,循环就是这条"自动化流水线"。它让计算机不知疲倦地重复执行任务,从计算 1+2+3+...+10000 到处理百万条数据,都离不开循环。

Python 提供了两种循环:

  • for 循环:像点名——"张三、李四、王五...每个人都叫一遍"
  • while 循环:像守门——"只要有人排队,就继续放行"

一、for 循环:逐个处理的"点名器"

1.1 最基本的 for 循环

python
names = ['Michael', 'Bob', 'Tracy']

for name in names:
    print(name)

输出

Michael
Bob
Tracy

生活化理解:就像老师点名——"Michael 到!Bob 到!Tracy 到!"。for name in names 就是"对 names 里的每个人,执行以下操作"。

执行流程

第1次循环:name = 'Michael' → print('Michael')
第2次循环:name = 'Bob'     → print('Bob')
第3次循环:name = 'Tracy'   → print('Tracy')
(没有更多元素,循环结束)

1.2 用 for 循环累加

python
sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
print(sum)    # 55

逐步解析

循环次数xsum(旧)sum(新)
1101
2213
3336
............
10104555

1.3 range():生成数字序列

如果要计算 1 到 100 的和,手写 [1, 2, 3, ..., 100] 太麻烦。Python 提供了 range() 函数:

python
# range(5) 生成 0,1,2,3,4(注意:不包含5!)
print(list(range(5)))        # [0, 1, 2, 3, 4]

# range(1, 5) 生成 1,2,3,4
print(list(range(1, 5)))     # [1, 2, 3, 4]

# range(1, 10, 2) 生成 1,3,5,7,9(步长为2)
print(list(range(1, 10, 2))) # [1, 3, 5, 7, 9]

计算 1-100 的和

python
sum = 0
for x in range(101):    # 0 到 100
    sum = sum + x
print(sum)    # 5050

生活化理解range(101) 像自动生成号码牌——0号、1号、2号...100号,不用手写。

1.4 for 循环遍历字符串

python
for char in 'Hello':
    print(char)

输出

H
e
l
l
o

1.5 for 循环遍历字典

python
d = {'name': '张三', 'age': 25, 'city': '北京'}

# 遍历 key
for key in d:
    print(key)

# 遍历 key-value
for key, value in d.items():
    print(f'{key}: {value}')

二、while 循环:条件驱动的"守门员"

2.1 最基本的 while 循环

python
n = 1
while n <= 5:
    print(n)
    n = n + 1

输出1 2 3 4 5

生活化理解:就像健身房跑步——"只要还没跑满30分钟,就继续跑"。while n <= 5 是"只要 n 不超过 5,就继续"。

执行流程

n=1:1<=5 为真 → print(1) → n=2
n=2:2<=5 为真 → print(2) → n=3
...
n=5:5<=5 为真 → print(5) → n=6
n=6:6<=5 为假 → 循环结束

2.2 计算 100 以内奇数和

python
sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)    # 2500

逐步解析

循环次数nsum(旧)sum(新)
199099
29799196
395196291
............
50124992500
51-12500循环结束

2.3 while 循环的注意事项

python
# ❌ 危险:忘记更新条件变量,导致死循环
n = 1
while n <= 5:
    print(n)
    # 忘记写 n = n + 1,n 永远是 1,死循环!

# ✅ 正确:确保条件最终会变为 False
n = 1
while n <= 5:
    print(n)
    n = n + 1    # 关键:更新 n

三、break:紧急出口的"逃生门"

3.1 break 的作用

break 语句会立即退出整个循环,不管循环条件是否满足。

python
n = 1
while n <= 100:
    if n > 10:
        break        # n=11 时,跳出循环
    print(n)
    n = n + 1
print('END')

输出1 2 3 4 5 6 7 8 9 10 END

生活化理解:就像你在排队买票,突然有急事要离开——break 就是"不排了,直接走人"。

3.2 在 for 循环中使用 break

python
names = ['Michael', 'Bob', 'Tracy', 'Adam']

for name in names:
    if name == 'Tracy':
        print('找到了!')
        break
    print(f'检查:{name}')

输出

检查:Michael
检查:Bob
找到了!

3.3 用 break 替代复杂的循环条件

python
# 不用 break(条件复杂)
n = 1
found = False
while n <= 100 and not found:
    if n == 50:
        found = True
    else:
        print(n)
        n = n + 1

# 用 break(更清晰)
n = 1
while n <= 100:
    if n == 50:
        break
    print(n)
    n = n + 1

四、continue:跳过的"快进键"

4.1 continue 的作用

continue 语句会跳过本次循环的剩余代码,直接进入下一次循环

python
n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0:     # 如果是偶数
        continue       # 跳过 print,直接进入下一次循环
    print(n)

输出1 3 5 7 9

生活化理解:就像看视频时按快进——"这段广告跳过,继续看下一段"。continue 就是"本次循环的剩余部分跳过,直接开始下一轮"。

4.2 在 for 循环中使用 continue

python
# 打印所有非空字符串
words = ['apple', '', 'banana', '', 'cherry']

for word in words:
    if not word:        # 如果是空字符串
        continue        # 跳过
    print(word)

输出apple banana cherry

4.3 break vs continue 对比

对比维度breakcontinue
作用退出整个循环跳过本次循环
循环是否继续终止继续下一轮
生活类比紧急出口,直接离开快进键,跳过当前

五、常见误区与陷阱

5.1 误区一:死循环

python
# ❌ 经典死循环:条件永远为真
n = 1
while n > 0:
    print(n)
    n = n + 1    # n 越来越大,永远 > 0

# ❌ 忘记更新变量
n = 1
while n <= 10:
    print(n)
    # 忘记 n = n + 1

# ✅ 正确
n = 1
while n <= 10:
    print(n)
    n = n + 1

如何退出死循环:按 Ctrl + C(Windows/Linux)或 Cmd + C(Mac)。

5.2 误区二:range() 的边界

python
# ❌ 错误:以为 range(5) 包含 5
for i in range(5):
    print(i)    # 输出 0,1,2,3,4(没有5!)

# ✅ 正确:要包含 5 就写 range(6)
for i in range(6):
    print(i)    # 输出 0,1,2,3,4,5

记忆口诀range(n) 生成 0n-1左闭右开

5.3 误区三:在循环中修改列表

python
# ❌ 危险:在遍历列表时修改列表
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)    # 可能导致跳过元素或错误

# ✅ 正确:创建新列表
numbers = [1, 2, 3, 4, 5]
odd_numbers = []
for num in numbers:
    if num % 2 != 0:
        odd_numbers.append(num)
print(odd_numbers)    # [1, 3, 5]

5.4 误区四:滥用 break 和 continue

python
# ❌ 过度使用 break 和 continue,逻辑混乱
n = 0
while True:
    n = n + 1
    if n % 2 == 0:
        continue
    if n > 10:
        break
    print(n)

# ✅ 更清晰:用循环条件控制
n = 0
while n < 10:
    n = n + 1
    if n % 2 != 0:
        print(n)

原则:能用循环条件表达的,就不要用 break/continue。


六、实战案例

案例 1:斐波那契数列

python
# 打印前 20 个斐波那契数
a, b = 0, 1
count = 0

while count < 20:
    print(a, end=' ')
    a, b = b, a + b    # 关键:同时更新两个变量
    count = count + 1

输出0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181

案例 2:猜数字游戏

python
import random

answer = random.randint(1, 100)
attempts = 0
max_attempts = 10

print('我想了一个 1-100 的数字,你来猜!')

while attempts < max_attempts:
    guess = int(input(f'第 {attempts + 1} 次猜测:'))
    attempts = attempts + 1

    if guess == answer:
        print(f'恭喜!你用了 {attempts} 次就猜对了!')
        break
    elif guess < answer:
        print('猜小了,再试试')
    else:
        print('猜大了,再试试')
else:
    print(f'很遗憾,答案是 {answer}')

案例 3:简易购物车

python
cart = []
total = 0

print('欢迎购物!输入商品名称,输入 "结账" 结束。')

while True:
    item = input('请输入商品:')

    if item == '结账':
        break

    if not item:
        print('商品名不能为空,请重新输入')
        continue

    price = float(input(f'请输入 "{item}" 的价格:'))
    cart.append({'name': item, 'price': price})
    total = total + price
    print(f'已添加:{item},当前总价:{total:.2f} 元')

print('\n===== 购物清单 =====')
for item in cart:
    print(f'{item["name"]}: {item["price"]:.2f} 元')
print(f'总计:{total:.2f} 元')

案例 4:打印九九乘法表

python
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{j}x{i}={i*j}', end='\t')
    print()    # 换行

输出

1x1=1
1x2=2	2x2=4
1x3=3	2x3=6	3x3=9
...

七、动手练习

练习 1:用 for 循环打印 Hello, xxx!

python
L = ['Bart', 'Lisa', 'Adam']

for name in L:
    print(f'Hello, {name}!')

练习 2:用 while 循环计算 1-100 的偶数和

python
sum = 0
n = 2
while n <= 100:
    sum = sum + n
    n = n + 2
print(sum)    # 2550

练习 3:写一个死循环,然后用 Ctrl+C 退出

python
# 这就是一个死循环
while True:
    print('按 Ctrl+C 退出')

总结

概念核心要点
for 循环遍历序列(list, tuple, str, dict),逐个处理
while 循环条件为真时重复执行
range()生成数字序列,左闭右开
break立即退出整个循环
continue跳过本次循环,进入下一轮
死循环条件永远为真,用 Ctrl+C 退出
选择原则已知次数用 for,未知次数用 while

记住:for 是点名器——逐个处理已知元素;while 是守门员——条件满足就继续。break 是逃生门——立即离开;continue 是快进键——跳过当前


本文基于廖雪峰 Python 教程重新撰写,补充了大量背景知识、生活化类比和实战场景。推荐继续阅读:函数