返回相应讲座的平均分数

时间:2012-11-09 07:47:35

标签: python list whitespace

每一行代表一名学生,由学生编号,姓名,部门代码和期中成绩组成,全部由空格分隔。 第一个参数已经完成,文件打开了 第二个参数是段代码 这是链接http://www.cdf.toronto.edu/~csc108h/fall/exercises/e3/grade_file.txt

我的代码:

def average_by_section(the_file, section_code):  
    '''(io.TextIOWrapper, str) -> float  
    Return the average midtermmark for all students in that section  
    '''  
        score = 0  
        n = 0  
        for element in the_file:  
            line = element.split()  
            if section_code == line[-2]:  
                mark = mark + float(line[-1])  
                n += 1  

        lecture_avg = mark / n  
        return lecture_avg  

我的索引超出了范围。它是否正确?或者我只是打开错误的文件? 有人可以测试这段代码并下载该文件吗?我很确定它应该有用,但不适合我。

2 个答案:

答案 0 :(得分:0)

好吧,您可以使用print lineprint(line)对索引超出范围错误进行排查,以探索“行”中的项目数(即split()的效果)。我建议您仔细查看split()声明......

答案 1 :(得分:0)

您似乎省略了代码的一部分,您可以在其中定义其中一些变量(section_codemark等),但调整某些内容似乎可以正常工作。假设您得到的错误是IndexError: list index out of range,当您尝试按索引访问列表的元素时,会发生这种情况,而该索引不存在。例如:

>>> l = ['one']
>>> l[0]
'one'
>>> l[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l[-1]
'one'
>>> l[-2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

因此,在您的代码中,如果line少于两个项目,您将收到该错误。我会检查并查看您line实际获得的内容,以确保它符合您的预期。