我该如何修复TypeError: 'int' object is not iterable错误?

17

我正在尝试编写一个程序,允许您输入班级中学生的数量,然后为每个学生输入3个测试成绩以计算平均值。我是编程新手,一直收到一条错误消息,但我不知道它的含义或如何修复它。以下是目前为止我的代码:

students=int(input('Please enter the number of students in the class: '))

for number in students:
        first_grade=(input("Enter student's first grade: "))
        second_grade=(input("Enter student's second grade: "))
        third_grade=(input("Enter student's third grade: "))
4个回答

40

当你写下这段话时

for number in students:

你的意图是,“运行这个代码块 students 次,其中 students 是我刚刚输入的值。” 但在Python中,你传递给一个 for 循环语句的东西必须是某种可迭代对象。在这种情况下,你需要的只是一个range 语句。它将生成一系列数字,通过对这些数字进行迭代,你的 for 循环将执行正确的次数:

for number in range(students):
    # do stuff

在幕后,range只是生成一组连续数字的列表:

>>> range(5)
[0, 1, 2, 3, 4]

在您的情况下,数字并不重要;以下两个 for 语句将执行相同的操作:

for number in range(5):

for number in [1, 3, 97, 4, -32768]:

但是使用range版本被认为更符合习惯,并且如果你需要在循环中修改某种类型的列表(这可能是你后来需要做的事情),那么它会更加方便。


如果你只是想执行循环“学生”次数,那么这是最简单的方法。如果你想在循环中实际使用“数字”,那么arcx的答案中的代码行是正确的方法。 - RobH
当然可以,但要小心。如果你只是想显示数字,那么arkx的答案会给你一些对人类有意义的数字:“学生#1是Sally Smith;学生#2是Jimmy Jones”等等。但如果你正在Python列表中存储值——其索引从零开始——那么最好使用range(number_of_students)形式,并在需要向用户显示时将迭代变量加一。 - bdesham
请查看我在这个答案中的最后一句评论;同时,也请查看我对arkx答案的评论。 - RobH
谢谢,这很有道理。但我仍然很困惑如何让所有的东西都运作起来。我可以计算每个学生三次测试的平均分,但是我需要计算班级平均分并显示最高和最低平均分。但我不确定如何做到这一点,因为我不知道如何为每个学生的平均分获取不同的名称,以便在最后进行计算。 - tinydancer9454
对于范围内的数字(学生): first_grade=int(input("输入学生的第一门成绩:")) second_grade=int(input("输入学生的第二门成绩:")) third_grade=int(input("输入学生的第三门成绩:")) StudentAverage=(first_grade + second_grade + third_grade)/3 print("学生的平均分是", StudentAverage) - tinydancer9454
@ChelseaOtis 请查看 https://gist.github.com/bdesham/4983084。但如果您有任何进一步的问题,应该开一个新的问题,而不是继续这个讨论。 - bdesham

3

数字不能被迭代。你可能正在寻找的是range函数,它将创建一个数字序列,直到你想要的数字:

for number in range(1, students + 1):

我在那里添加+1的原因是因为range的第二个参数是独占的。


域是学生数量。从0开始计数人很奇怪。我在考虑一种情况,即您想对数字做某些操作,例如将其保存到文件中或执行类似的操作。 - eagleflo
如果您想在循环内实际使用_number_,则这是正确的方法。 如果您只想执行循环_students_次,请参阅bdesham的答案。 - RobH
1
我建议你在打印数字时处理好这个偏移量,而不是在循环中处理。如果以后你想要在数组中进行索引,你必须记得减去多余的1。试图对抗自然索引只会引发各种偏差错误。 - tacaswell
在这种情况下,我宁愿使用“enumerate”枚举学生集合。但是说得好。 - eagleflo

0

试试这个:

  students=int(input('Please enter the number of students in the class: '))

  for number in range(students):
        first_grade=(input("Enter student's first grade: "))
        second_grade=(input("Enter student's second grade: "))
        third_grade=(input("Enter student's third grade: "))

0

试试这个...它会起作用的...

i=0
x = "abcd"


print("Using for loop printing string characters")
for i in range(len(x)):
    print(x[i])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接