写代码时,你有没有遇到过这样的情况:点一下按钮,程序卡住不动了;刷新网页,CPU 占用飙到 100%;或者明明只该打印 5 行,结果弹出几百条一模一样的输出?十有八九,是循环控制出了岔子。
最常见的一种:死循环
比如新手常写的这段 Python 代码:
i = 0
while i < 5:
print("第", i, "次")
# 忘了写 i += 1!
i 一直卡在 0,条件 i < 5 永远成立,程序就再也出不来这个 while。不是电脑坏了,是你没给它“放手”的信号。
边界搞错,少跑一次或多跑一次
用 for 循环遍历列表,下标从 0 开始,但有人习惯性写成 range(1, len(lst)),第一项直接跳过;或者写成 range(0, len(lst) + 1),最后一步访问 lst[5]——而列表只有 5 个元素(索引最大是 4),立马报 IndexError。
循环里改了控制变量,自己把自己绕晕
更隐蔽的是这种:
nums = [1, 2, 3, 4, 5]
for n in nums:
if n == 3:
nums.remove(n) # 在遍历时删元素!
你以为删掉 3 后,下一轮会拿到 4,其实不会——Python 的 for 是按内部索引走的,删掉一个,后面所有元素前移,4 就被“跳”过去了。结果 4 没处理,循环还提前结束了。
怎么快速盯住这些坑?
动手前先问自己三句:
• 这个变量,什么时候开始?什么时候结束?
• 每轮循环后,它是不是真变了?变对了吗?
• 如果中间加个 print(i),数字是不是按你想的顺序蹦?
别嫌啰嗦,多打两行调试输出,比盯着屏幕干猜半小时强得多。
循环不是背公式,它是个“守门员”:你得明确告诉它“开门”和“关门”的时机。门锁死了,程序就卡住;门开太早,活儿没干完就跑了;门开错方向,干脆把人拦在门外——这些,都是控制逻辑没理清。