Python 在函数内使用 For 循环

use*_*076 2 python for-loop function range

我是一名 Python 初学者,正在尝试编写一个程序,该程序将允许用户输入个人姓名和考试成绩,我应该在找到平均值后给出成绩,到目前为止我已经能够编写该程序,但我正在经历尝试调试它的困难。我的程序运行良好,直到它开始计算平均值,它通常会显示一条错误消息说

"TypeError: 'float' object is not subscriptable" 
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我为什么我的代码不起作用吗?提前谢谢你的帮助!

def calcaverage(test1,test2,test3):
    for count in range(numofstudent):
        curraverage=((test1[count]+ test2[count]+ test3[count])/3)
        if curraverage>= 90:
            grade= "A"
            return grade 
        else:
            if curraverage >= 80 and curraverage < 90:
                grade= "B"
                return grade
            else:
                if curraverage >= 70 and curraverage < 80:
                    grade= "C"
                    return grade
                else:
                    if curraverage < 70:
                        grade= "F"
                        return grade

numofstudent=int(input("How Many Students?: "))
students=[]
test1=[]
test2=[]
test3=[]
averagescore=[]
grade=[]
for count in range(numofstudent):
    currstudent=input("Please enter name of student: ")
    students.append(currstudent)
    currstudenttest1= float(input("First test score?: "))
    currstudenttest2= float(input("Second test score?: "))
    currstudenttest3= float(input("Third test score?: "))
    test1.append(currstudenttest1)
    test2.append(currstudenttest2)
    test3.append(currstudenttest3)

grade=calcaverage(test1,test2,test3)
averagescore.append(grade)
print([students], "your grade is " ,[grade])
Run Code Online (Sandbox Code Playgroud)

Pau*_*ius 5

来了一些艰难的爱。

这里有多个问题。通常,您需要学习逐行思考程序,就像您是 CPU 一样,并弄清楚您希望在每一步发生什么。然后,您需要清除错误,直到实际 CPU 所做的与您想要的相同。

在第二行(for 循环)中,变量“curraverage”是未定义的,因为它直到几行之后才被定义。无论如何,这是错误的变量;您想遍历所有学生,因此您需要 range(numofstudent)。

在下一行中,“test”未定义。你的意思是“test3”。如果你想学习编程,你就不能允许自己犯这些错误。

变量 curraverge 看起来像一个错字,但实际上不是。想一个更好的名字,不难。

在第 5 行,averagescore(在下面被声明为全局变量,并且是一个列表)现在被重新声明为局部变量并绑定到浮点数。因此,您不能在第 6 行附加到它。第 5 行应该简单地丢弃,它除了创建一个错误之外什么都不做。

行级 [count] 不做任何事情。您需要调用grade.append 来构建成绩列表。但是由于您还没有计算成绩,所以这里不存在这样的行。

接下来,您将平均分数与 90 和 80 等进行比较,但这又是错误的变量。这就是您在下面声明的列表。在这里,您需要一名学生的分数(即 curraverage)。

然后你从循环内部返回,导致函数在你计算出一个以上的等级之前退出。这些回报都不应该在那里。

我可以继续。你需要非常非常小心你正在做的事情。请记住,计算机非常愚蠢——它们完全按照指令执行,无论您是否希望它们这样做。

祝你好运。

  • 感谢 Paul 的建议,直到我发布我的问题后,我才意识到我的程序写得有多糟糕。我修复了大部分问题,例如拼写错误和缩进,但是现在我阅读了您的评论,我现在可以更好地了解为什么我的程序仍然无法运行,感谢您的反馈,谢谢 (2认同)