python for in循环不能遍历整数怎么解决
> 本文整理 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. 检查循环体里"每一步做什么"
循环体里的代码是重复执行的,你要确保:
-
每次循环都更新了结果(比如累加、添加元素)。
-
没有在循环里意外重置变量(比如把总和每次归零)。
典型翻车:
python
total = 0
for i in range(5):
total = 0
# 这里重置了!每次循环 total 都是0
total += i
print(total)
# 输出 4 而不是 10
3. 用"打印调试法"看中间结果
在循环里加 print 看每一步发生了什么:
python
for i in range(5):
print(f"第{i}步,当前i={i}")
# 其他代码
看到输出后,你就能发现 i 是不是你想要的,或者某些逻辑顺序错了。
20-40 行可运行示例代码
下面是一个经典场景:计算 1 到 10 的偶数平方和。包含正确写法、常见错误和调试方法。
python
# 场景:计算 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}")
输出结果:
text
错误写法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,调试多了就有感觉了。