我的任务是为学校项目制作测验应用程序。这意味着询问用户他们想要多少问题,然后他们输入所有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)) + "!")
有谁知道如何解决这个问题?
答案 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