python for 循环如何使用?
同学你好,看到你在 for 循环上卡住了,很正常的,大一的时候我也被 range 和列表遍历搞得头大。别急,咱们一步步来拆,以后写循环就像喝水一样自然。
先给排查思路(3步)
1. 明确“我要对谁循环”
先搞清楚循环的对象是什么:
- 是数字范围(比如 1 到 10)?用range()。
- 是列表里的每个元素(比如[1, 2, 3])?直接for item in list。
- 是字典的键或值?用.keys()、.values()或.items()。
常见错误:把整个列表当循环变量,比如for i in [1, 2, 3]里,i是元素,不是索引。如果要用索引,得用range(len(list))。
2. 检查循环体里“每一步做什么”
循环体里的代码是重复执行的,你要确保:
- 每次循环都更新了结果(比如累加、添加元素)。
- 没有在循环里意外重置变量(比如把总和每次归零)。
典型翻车:
total = 0 for i in range(5): total = 0 # 这里重置了!每次循环 total 都是0 total += i print(total) # 输出 4 而不是 103. 用“打印调试法”看中间结果
在循环里加print看每一步发生了什么:
for i in range(5): print(f"第{i}步,当前i={i}") # 其他代码看到输出后,你就能发现 i 是不是你想要的,或者某些逻辑顺序错了。
20-40 行可运行示例代码
下面是一个经典场景:计算 1 到 10 的偶数平方和。包含正确写法、常见错误和调试方法。
# 场景:计算 1~10 中所有偶数的平方之和 # 正确结果:2² + 4² + 6² + 8² + 10² = 4 + 16 + 36 + 64 + 100 = 220 # ---------- 错误写法 1:忘记累加 ---------- total = 0 for i in range(1, 11): if i % 2 == 0: square = i ** 2 # 这里没有把 square 加到 total 上! print(f"错误写法1结果:{total}") # 输出 0,因为 total 从未更新 # ---------- 错误写法 2:误用索引 ---------- numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] total = 0 for i in numbers: # i 是元素,不是索引 if numbers[i] % 2 == 0: # 这里想用索引,但 i 是元素,所以 numbers[3] 才是 4 total += i ** 2 # 会报 IndexError,因为当 i=10 时,numbers[10] 不存在(列表只有 0~9 索引) # ---------- 正确写法 1:直接遍历元素 ---------- total = 0 for num in numbers: if num % 2 == 0: total += num ** 2 print(f"正确写法1结果:{total}") # 输出 220 # ---------- 正确写法 2:用 range 遍历索引 ---------- total = 0 for i in range(len(numbers)): if numbers[i] % 2 == 0: total += numbers[i] ** 2 print(f"正确写法2结果:{total}") # 输出 220 # ---------- 调试技巧:打印每一步 ---------- print("\n--- 调试输出 ---") total = 0 for i, num in enumerate(numbers, start=1): if num % 2 == 0: print(f"第{i}步:数字{num}是偶数,平方{num**2},当前总和{total + num**2}") total += num ** 2 else: print(f"第{i}步:数字{num}是奇数,跳过") print(f"最终总和:{total}")输出结果:
错误写法1结果:0 正确写法1结果:220 正确写法2结果:220 --- 调试输出 --- 第1步:数字1是奇数,跳过 第2步:数字2是偶数,平方4,当前总和4 第3步:数字3是奇数,跳过 第4步:数字4是偶数,平方16,当前总和20 第5步:数字5是奇数,跳过 第6步:数字6是偶数,平方36,当前总和56 第7步:数字7是奇数,跳过 第8步:数字8是偶数,平方64,当前总和120 第9步:数字9是奇数,跳过 第10步:数字10是偶数,平方100,当前总和220 最终总和:220总结一下
- 先想清楚“循环对象是什么”,是元素还是索引。
- 循环体里确保变量有更新(累加、拼接等)。
- 别怕用print,调试多了就有感觉了。
如果还是跑不通,把完整报错和循环代码贴到评论区,我帮你看是 range 用错还是遍历对象选错了。