从入门到精通,5 个场景彻底搞懂循环控制
一、先搞懂核心区别
┌─────────────────────────────────────────────────┐
│ │
│ 🛑 break → 终止整个循环,直接退出 │
│ ⏭️ continue → 跳过当前这轮,继续下一轮 │
│ │
│ 比喻:break = 辞职不干了 │
│ continue = 这波团不打,等下波 │
│ │
└─────────────────────────────────────────────────┘
二、break:找到答案就收工
场景 1:密码输错 3 次锁定
correct_pwd = "python666"
for i in range(3):
pwd = input(f"第{i+1}次输入密码:")
if pwd == correct_pwd:
print("✅ 登录成功!")
break# 对了就停,不用试满 3 次
else:
print("❌ 密码错误")
else: # 循环正常结束(没触发 break)才执行
print("🚫 账户已锁定")
流程图:
第1次 → 错误 → 继续
第2次 → 正确 → break 跳出 → 登录成功
场景 2:列表中找第一个偶数
nums = [1, 3, 5, 8, 10, 12]
for num in nums:
if num % 2 == 0:
print(f"找到第一个偶数:{num}")
break# 找到就停,10 和 12 不看了
输出:
找到第一个偶数:8
💡 break 的灵魂:减少无效计算,提升效率
三、continue:不符合条件的跳过
场景 3:只处理有效数据
data = [85, -5, 92, 0, 78, -3, 88]
for score in data:
if score < 0: # 无效数据
print(f"跳过无效值:{score}")
continue# 后面的代码不执行,直接下一轮
print(f"处理成绩:{score}")
输出:
处理成绩:85
跳过无效值:-5
处理成绩:92
处理成绩:0
跳过无效值:-3
处理成绩:88
场景 4:打印 1-20 跳过 7 的倍数
for i in range(1, 21):
if i % 7 == 0:
continue# 是 7 的倍数就跳过
print(i, end=" ")
# 输出:1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20
# 跳过了:7, 14
💡 continue 的灵魂:过滤逻辑, cleaner code
四、break vs continue 对比表
五、组合实战:数据处理流水线
# 处理订单数据:遇到错误停止,跳过未支付订单
orders = [
{"id": 1, "status": "paid", "amount": 100},
{"id": 2, "status": "unpaid", "amount": 200},
{"id": 3, "status": "paid", "amount": -50}, # 异常数据
{"id": 4, "status": "paid", "amount": 300},
]
total = 0
for order in orders:
# 1. 检查异常数据
if order["amount"] < 0:
print(f"🚨 订单{order['id']}金额异常,停止处理")
break
# 2. 跳过未支付
if order["status"] != "paid":
print(f"⏭️ 订单{order['id']}未支付,跳过")
continue
# 3. 处理有效订单
total += order["amount"]
print(f"✅ 订单{order['id']}处理完成")
print(f"总金额:{total}")
输出:
✅ 订单1处理完成
⏭️ 订单2未支付,跳过
🚨 订单3金额异常,停止处理
总金额:100
六、避坑指南
❌ 坑 1:continue 后面写代码(死代码)
for i in range(5):
if i == 2:
continue
print("这行永远执行不到") # 警告:Unreachable code
print(i)
❌ 坑 2:break 只能跳一层循环
for i in range(3):
for j in range(3):
if j == 1:
break# 只跳出内层,外层继续
print(f"{i}-{j}")
输出:
0-0
1-0
2-0
想跳出多层?用 flag 变量或封装成函数
✅ 正确姿势:多层循环跳出
deffind_target():
for i in range(3):
for j in range(3):
if i * j == 4:
return (i, j) # 直接返回,彻底退出
returnNone
result = find_target()
print(result) # (2, 2)
七、一句话总结
break → 循环的"紧急出口",满足条件立马撤
continue → 循环的"筛选器",不符合的不要看
📝 课后练习(附思路)