You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环结束后计数器num_grades值不符合预期的原因及解决方法

问题分析与修复方案

先看你写的代码:

num_grades = 0
for num_grades in range(8):
    grade = int(input("Enter grade " + str(num_grades + 1) + ": "))
    # additional logic to check the grade and categorize it
print("Total number of grades:", num_grades)
# additional code to output more results

为什么输出是7而非8?

range(8)生成的是从0到7的整数序列(共8个元素:0、1、2、3、4、5、6、7)。你把num_grades当作for循环的迭代变量,每次循环都会把它替换成序列里的下一个值。当循环结束时,num_grades停在序列的最后一个值——7,所以输出的是7。

代码的核心问题

你错误地复用了num_grades:既把它当循环迭代变量,又想让它作为总计数。for循环的迭代变量会被range的每个值覆盖,你一开始给它赋值的0完全没用,而且循环结束后它只会保留最后一次迭代的数值,不是循环的总次数。

修复方法

方法1:拆分迭代变量和计数变量

单独用一个变量做计数,迭代变量用占位符_表示(表示这个变量不用):

num_grades = 0
for _ in range(8):
    grade = int(input("Enter grade " + str(num_grades + 1) + ": "))
    # 额外逻辑
    num_grades += 1  # 每次循环计数加1
print("Total number of grades:", num_grades)

这样循环8次后,num_grades会累计到8,符合预期。

方法2:直接使用固定循环次数

如果总次数是固定的8,完全可以直接输出8,不用计数:

for i in range(8):
    grade = int(input("Enter grade " + str(i + 1) + ": "))
    # 额外逻辑
print("Total number of grades:", 8)

这种写法更简洁,适合次数固定的场景。

方法3:正确的while循环写法

你之前用while没解决,大概率是没在循环里自增计数变量。正确写法如下:

num_grades = 0
while num_grades < 8:  # 条件是计数小于8时继续循环
    grade = int(input("Enter grade " + str(num_grades + 1) + ": "))
    # 额外逻辑
    num_grades += 1  # 必须在循环里自增,否则会无限循环
print("Total number of grades:", num_grades)

每次循环后计数加1,当num_grades等于8时,循环终止,此时输出的就是8。

内容的提问来源于stack exchange,提问作者Liam Mayenco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:45:37