Python 列表索引超出范围错误
我被分配了一个任务,要为一个学校项目制作一个测验应用。这个应用的功能是询问用户想要多少道题目,然后让他们输入所有的题目和答案。完成后,其他人就可以来参加这个测试。
现在的问题是,我在results函数里遇到了一个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
由于某种未知的原因,testAnswers和userAnswers的长度不一致。这里的教训是,始终要确保它们的长度是相同的。
一个简单的if语句就可以避免整个错误的发生。
if len(answers) != len(userAnswers):
return
0
可能是你把代码复制到这个网站时出了点问题,不管怎样,这里的代码格式不对,导致很难看懂。
不过很明显,你在访问一个列表时,试图访问一个不存在的地方。为了帮助你找到这个错误,在你开始 while 循环后加上这一行:
print 'n %s, times %s, user_answers %s, answer_list %s' % (n, times, user_answers, answer_list)
然后运行程序,把程序的输出结果粘贴到你的问题里(但请先修正缩进)
3
你的问题出在这里:
while n < times:
if user_answers[n] == answer_list[n]:
score += 1
n += 1
if user_answers[n] != answer_list[n]:
n += 1
假设 times 是 10,n 是 9,这样代码就会执行,然后 n+=1
让 n 变成 10。很可能,你的数组里有 10 个元素(这里的 10 只是个例子),这时 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
这个部分。
while n < times:
if user_answers[n] == answer_list[n]:
score += 1
n += 1
注意,代码中有很多地方可以优化,但我就先把答案放在这里,其他的你可以自己去探索。