-2

每行代表一个学生,由一个学号、一个姓名、一个部门代码和一个期中成绩组成,所有这些都用空格分隔。第一个参数已经完成,文件已打开,
第二个参数是部分代码,这是链接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  

我的索引超出范围。这个对吗?还是我只是打开了错误的文件?
有人可以测试此代码并下载该文件吗?我很确定它应该工作,但不适合我。

4

2 回答 2

0

print line好吧,您可以使用或print(line)探索“行”中的项目数(即 的效果)来解决索引超出范围错误 split()。我建议仔细看看你的split()陈述......

于 2012-11-09T07:58:40.820 回答
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以确保它是您所期望的。

于 2012-11-09T07:58:55.717 回答