Python列表索引超出范围错误

时间:2014-10-23 19:56:14

标签: python python-3.4

我的任务是为学校项目制作测验应用程序。这意味着询问用户他们想要多少问题,然后他们输入所有Q& A&#39。完成后,有人会参加测试。

问题是,我从结果函数中获得了 IndexError 。该功能应该将测试答案与用户的答案进行比较,并打印出一个分数。

def results(testAnswers, userAnswers):
    score = 0
    for i in range(0, len(answers)):
        if testAnswers[i].lower().strip() == userAnswers[i].lower().strip():
            score += 1

    print("\nResults: You got " + str(score) + " out of " + str(len(answers)) + "!")

有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

你的问题在这里:

while n < times:
    if user_answers[n] == answer_list[n]:
        score += 1
        n += 1
    if user_answers[n] != answer_list[n]:
        n += 1

假设时间是10,n是9,它执行,n+=1使它成为10.很可能,数组中有10个元素(注释10是一个例子),现在{{1引发异常,因为有效变量为user_answers[10

要解决此问题,请使用0..9

elif

替代方法是完全摆脱while n < times: if user_answers[n] == answer_list[n]: score += 1 n += 1 elif user_answers[n] != answer_list[n]: n += 1 条款,

else

请注意,有很多地方可以优化代码,但我只想在这里留下答案,让你自己解决其他问题。

答案 1 :(得分:0)

将您的代码复制到此网站可能会出错,但无论代码格式是否正确,都会使其难以阅读。

无论如何,它清楚地表明你正在将列表索引到一个不存在的点。要帮助追踪此错误,请在启动while循环后添加此行:

print 'n %s, times %s, user_answers %s, answer_list %s' % (n, times, user_answers, answer_list)

然后运行程序并将程序的输出粘贴到您的问题中(但首先请更正缩进)

答案 2 :(得分:0)

由于未知原因,testAnswers和userAnswers的长度不同。这里的教训是始终确保它们的长度相同。

简单的if-statment可以防止整个错误。

if len(answers) != len(userAnswers):
    return