python中的循环缩进

函数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,那么您将留下一个列表

点赞