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)
来了一些艰难的爱。
这里有多个问题。通常,您需要学习逐行思考程序,就像您是 CPU 一样,并弄清楚您希望在每一步发生什么。然后,您需要清除错误,直到实际 CPU 所做的与您想要的相同。
在第二行(for 循环)中,变量“curraverage”是未定义的,因为它直到几行之后才被定义。无论如何,这是错误的变量;您想遍历所有学生,因此您需要 range(numofstudent)。
在下一行中,“test”未定义。你的意思是“test3”。如果你想学习编程,你就不能允许自己犯这些错误。
变量 curraverge 看起来像一个错字,但实际上不是。想一个更好的名字,不难。
在第 5 行,averagescore(在下面被声明为全局变量,并且是一个列表)现在被重新声明为局部变量并绑定到浮点数。因此,您不能在第 6 行附加到它。第 5 行应该简单地丢弃,它除了创建一个错误之外什么都不做。
行级 [count] 不做任何事情。您需要调用grade.append 来构建成绩列表。但是由于您还没有计算成绩,所以这里不存在这样的行。
接下来,您将平均分数与 90 和 80 等进行比较,但这又是错误的变量。这就是您在下面声明的列表。在这里,您需要一名学生的分数(即 curraverage)。
然后你从循环内部返回,导致函数在你计算出一个以上的等级之前退出。这些回报都不应该在那里。
我可以继续。你需要非常非常小心你正在做的事情。请记住,计算机非常愚蠢——它们完全按照指令执行,无论您是否希望它们这样做。
祝你好运。