Python 从文件计算类平均值

Python 从文件计算类平均值,python,python-3.x,Python,Python 3.x,对于这个函数,我需要每个赋值的类平均值。当我尝试测试我的函数时,我得到了这个错误。谁能帮我修一下吗? 我想浏览一下这些专栏,看一下这样的东西。拆分列表后,我想交错作业的等级并添加相应的项目。我怎么做,然后计算平均值? 我想把[99,88,77,66][11,22,33,44][78,58,68,88]变成[99,11,78][88,22,58][77,33,68][66,44,88] 对于范围内的项目(等级列表[4:]): builtins.TypeError:“list”对象不能解释为整数 这

对于这个函数,我需要每个赋值的类平均值。当我尝试测试我的函数时,我得到了这个错误。谁能帮我修一下吗? 我想浏览一下这些专栏,看一下这样的东西。拆分列表后,我想交错作业的等级并添加相应的项目。我怎么做,然后计算平均值? 我想把[99,88,77,66][11,22,33,44][78,58,68,88]变成[99,11,78][88,22,58][77,33,68][66,44,88]

对于范围内的项目(等级列表[4:]): builtins.TypeError:“list”对象不能解释为整数

这是我的函数的文件

Last Name,First Name,Student No.,uTORid,A1,A2,A3,A4
Smith, Joe,9911991199,smithjoe9,99,88,77,66
Ash, Wood,9912334456,ashwood,11,22,33,44
Full, Kare,9913243567,fullkare,78,58,68,88


def class_avg(open_file):
    '''(file) -> list of float
    Return a list of assignment averages for the entire class given the open
    class file. The returned list should contain assignment averages in the 
    order listed in the given file.  For example, if there are 3 assignments 
    per student, the returned list should 3 floats representing the 3 
    averages.
   [a1_avg, a2_avg, a3_avg, a4_avg]
   [62.666666666666664, 56.0, 59.333333333333336, 66.0]
    '''
    new_list = []
    for line in open_file:
        grades_list = line.split(',')
    for item in range(grades_list[4:]):
    total = sum(grades_list[4:][item])
   avg = total/len(grades_list[4:])
   new_list.append(avg)
   return new_list
创建二维列表。。。。。 阅读所有的行,然后只需对要输出的列进行计算。。。 访问该列类似于

#example in python console
>>> list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> new_list = [item[1] for item in list]
>>> new_list
[2, 5, 8]
创建二维列表。。。。。 阅读所有的行,然后只需对要输出的列进行计算。。。 访问该列类似于

#example in python console
>>> list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> new_list = [item[1] for item in list]
>>> new_list
[2, 5, 8]

您的代码中有几个问题

  • 您需要跳过标题行(“姓、名、学号、uTORid、A1、A2、A3、A4”)
  • 您还计算每个学生的多重平均数(对于第一行,您的代码基本上是
    (9+9)/2
    (8+8)/2
    ,等等)
  • 另外,你似乎在试图往下读这些专栏,但这不起作用
这样的东西可能适合你:

averages = []

with open('class_avg.csv') as fp:
    next(fp)  # skip header row
    reader = csv.reader(fp)
    for student_row in reader:
        grades = student_row[4:]  # extract columns 4, 5, 6, and 7 all at once
        total = sum(float(grade) for grade in grades)
        average = total / len(grades)
        averages.append(average)

print(averages)

您的代码中有几个问题

  • 您需要跳过标题行(“姓、名、学号、uTORid、A1、A2、A3、A4”)
  • 您还计算每个学生的多重平均数(对于第一行,您的代码基本上是
    (9+9)/2
    (8+8)/2
    ,等等)
  • 另外,你似乎在试图往下读这些专栏,但这不起作用
这样的东西可能适合你:

averages = []

with open('class_avg.csv') as fp:
    next(fp)  # skip header row
    reader = csv.reader(fp)
    for student_row in reader:
        grades = student_row[4:]  # extract columns 4, 5, 6, and 7 all at once
        total = sum(float(grade) for grade in grades)
        average = total / len(grades)
        averages.append(average)

print(averages)


我想你需要跳过文件的第一行。此外,您应该使用标准库中的读取CSV文件。可能是
\n
字符问题:请尝试
grades4=assignment\u list[7]。第一个循环
grades1
中的strip()
是字符串“A1”。然后在该字符串上循环并尝试将
“A”
转换为浮点,但失败。这就是异常消息的含义。在python repl中尝试
float('A')
进行复制。float('A')和float(A)之间的区别看起来像是平均值avg1、avg2、avg3、avg4都是1。通过
打印(len(grades1))
进行验证。使用
grades=assignment\u list[4://code>然后使用
avg=sum(浮动(g)表示g级)/len(等级)
。保存7行代码。我认为您需要跳过文件中的第一行。此外,您应该使用标准库中的读取CSV文件。可能是
\n
字符问题:请尝试
grades4=assignment\u list[7]。第一个循环
grades1
中的strip()
是字符串“A1”。然后在该字符串上循环并尝试将
“A”
转换为浮点,但失败。这就是异常消息的含义。在python repl中尝试
float('A')
进行复制。float('A')和float(A)之间的区别看起来像是平均值avg1、avg2、avg3、avg4都是1。通过
打印(len(grades1))
进行验证。使用
grades=assignment\u list[4://code>然后使用
avg=sum(浮动(g)表示g级)/len(等级)
。保存7行代码。我要a1、a2、a3和a4中所有标记的平均值。我想要每个人的a1平均值,a2平均值,和a3平均值,像这样a1:99,11,78。这个平均值和其他作业一样,我明白了。这段代码仍然是一个很好的起点。你只需要为A1、A2、A3和A4中的每一行建立一个列表,通过遍历每个学生行,然后在读取所有行后进行求和和平均。我们可以通过遍历A1、A2、A3和A4的列,然后对其进行平均吗?如果我们要这样做,我们将如何浏览一个专栏?我在回答中添加了一个关于这一点的注释。你不能用那种方式阅读专栏。你必须遍历每一行,将每一列的值提取到一个对应的列表中。我把这个值放在哪里?我想要a1、a2、a3和a4中所有标记的平均值。我想要每个人的a1平均值,a2平均值,和a3平均值,像这样a1:99,11,78。这个平均值和其他作业一样,我明白了。这段代码仍然是一个很好的起点。你只需要为A1、A2、A3和A4中的每一行建立一个列表,通过遍历每个学生行,然后在读取所有行后进行求和和平均。我们可以通过遍历A1、A2、A3和A4的列,然后对其进行平均吗?如果我们要这样做,我们将如何浏览一个专栏?我在回答中添加了一个关于这一点的注释。你不能用那种方式阅读专栏。您必须遍历每一行,并将每一列的值提取到相应的列表中。我应该将该值放在哪里?我想获得a1平均值,以及与其他赋值相同的值。比如a1的分数是99,11,78,我想得到平均分,我想得到a1的平均分,和其他作业一样。a1的分数是99,11,78,我想得到平均值。