每一行代表一名学生,由学生编号,姓名,部门代码和期中成绩组成,全部由空格分隔。 第一个参数已经完成,文件打开了 第二个参数是段代码 这是链接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
我的索引超出了范围。它是否正确?或者我只是打开错误的文件? 有人可以测试这段代码并下载该文件吗?我很确定它应该有用,但不适合我。
答案 0 :(得分:0)
好吧,您可以使用print line
或print(line)
对索引超出范围错误进行排查,以探索“行”中的项目数(即split()
的效果)。我建议您仔细查看split()
声明......
答案 1 :(得分:0)
您似乎省略了代码的一部分,您可以在其中定义其中一些变量(section_code
,mark
等),但调整某些内容似乎可以正常工作。假设您得到的错误是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
实际获得的内容,以确保它符合您的预期。