函数avgavg()将一个列表作为输入,该列表的项目是三个数字的列表.每个三位数列表代表特定学生为课程收到的三个等级.例如,这是一个四个学生班级的输入列表:
[[95,92,86], [66,75,54],[89, 72,100],[34,0,0]]
函数avgavg()应该在屏幕上打印两行.第一行将包含一个包含每个学生平均成绩的列表.第二行只包含一个数字:平均班级,定义为所有学生平均成绩的平均值.
avgavg([[95, 92, 86], [66, 75, 54],[89, 72, 100], [34, 0, 0]])
[91.0, 65.0, 87.0, 11.333333333333334]
63.5833333333
下面是我的代码,如果用户输入4个列表,它的工作完全正常,但如果列表小于或大于4则不起作用.你能帮我解决第二部分的循环.
def avg(lst):
i = 0
A = 0
C = 0
for row in lst :
for item in row:
B = (lst[i][A]+lst[i][A+1]+lst[i][A+2])/len(lst[i])
D = lst[i][A]+lst[i][A+1]+lst[i][A+2]
C = C+D
print (B,end=' ')
i = i +1
print ()
E = len(lst[A])+len(lst[A+1])+len(lst[A+2])+len(lst[A+3])
C = C/E
print (C)
return
Output
In [163]: lst = [[95, 92, 86], [66, 75, 54], [89, 72, 100],[34, 0, 0]]
In [164]: avg(lst)
91.0 65.0 87.0 11.333333333333334
63.58333333333333
我试图把E放在循环中,但是我会在改变值的情况下退出索引.
最佳答案 您可以使用sum()而不是使用循环,因为您知道每个列表的长度
student_grades = [[95,92,86], [66,75,54],[89, 72,100],[34,0,0]] #this is the list you pass into the function
all_avg = []
for i in student_grades:
all_avg.append(sum(i)/3.0)
print (sum(all_avg)/len(all_avg))
63.5833333333
要回答你的问题,虽然你的问题源于这条线
E = len(lst[A])+len(lst[A+1])+len(lst[A+2])+len(lst[A+3])
你只限于4个列表.由于索引错误,您不能少于4,如果您有超过4,那么您将留下一个列表