Python列表索引超出范围

2024-07-04 17:15:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是为一个学校项目制作一个测验应用程序。它的意思是询问用户想要多少问题,然后他们输入所有的问答。一旦完成,就会有人参加测试。在

问题是,我从results函数得到一个索引器。这个函数用来比较测试答案和用户的答案,并打印出一个分数。在

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)) + "!")

有人知道我怎么解决这个问题吗?在


Tags: 项目函数答案用户应用程序lenlowerresults
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使其为10。很可能,数组中有10个元素(注10是一个例子),现在user_answers[10引发了一个异常,因为有效的变量是0..9

要解决此问题,请使用elif

^{pr2}$

另一种方法是完全去掉else子句

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

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

由于未知原因,测试答案和用户答案的长度不相等。这里的教训是始终确保它们的长度相同。在

一个简单的if语句可以防止整个错误。在

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

也许把你的代码复制到这个站点出错了,但是不管怎样,这里的代码格式都不正确,这使得你很难阅读。在

不管怎样,很明显你正在索引到一个不存在的点。要帮助跟踪此错误,请在启动while循环后添加以下行:

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

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

相关问题 更多 >

    热门问题