测验程序中的IndexError

时间:2014-04-23 19:02:44

标签: python python-3.x

我在为儿子修改测验时遇到一些问题。这是一个测验,它读取文本文件,并以随机顺序显示问题。当他回答每个问题两次时,测验就停止了。

所以他可以自己计时,我如何在第一个问题显示的时候添加一个计时器,并在他正确回答每个问题两次后进行打印?我正在使用python 3.3。

以下是目前的代码:

import random
import time
#open the text file
myfile = open("james.txt")
mylines = myfile.read().splitlines()
wrong = 0
#make blank lists
questions = []
answers = []
scores = []

#Seperate the file into Question and answer
for linenumber in range(0, len(mylines), 2):
        questions.append(mylines[linenumber])
        answers.append(mylines[linenumber+1])
        scores.append(0)

#Ask Question
for questionnumber in range(0,len(questions)):
        while scores[questionnumber] <2:
                questions.append(mylines[linenumber])
                questionnumber = random.randint(0,len(questions))
                print(questions[questionnumber])
                print(scores)
                #Generate Possible Answer
                possibleanswers = []
                possibleanswers.append(answers[questionnumber])
                for answerposition in range(1,3):
                        randomnum = random.randint(0,len(answers)-1)
                        while answers[randomnum] in possibleanswers:
                                randomnum = random.randint(0,len(answers)-1)
                        possibleanswers.append(answers[randomnum])
                #Shuffle  Answers
                random.shuffle(possibleanswers)
                for answernumber in range(0,len(possibleanswers)):
                        print(answernumber+1,possibleanswers[answernumber])

                input1 = int(input())
                givenanswer = possibleanswers[input1-1]
                if givenanswer == answers[questionnumber]:
                        print("Yes")
                        scores[questionnumber] = scores[questionnumber]+1
                else:
                        print("No, the answer was",questionnumber)
                        wrong = wrong+1

1 个答案:

答案 0 :(得分:1)

questionnumber = random.randint(0,len(questions))

randint具有包容性,因此它可以返回任何数字,包括len(questions)。如果它返回最大可能的数字,那么您将得到一个IndexError。例如,如果questions长三个元素,则questions[3]将超出范围。

减少随机数的允许范围:

questionnumber = random.randint(0,len(questions)-1)

编辑:您的#ask question循环中似乎也出现拼写错误,导致questions增长超过answers

for questionnumber in range(0,len(questions)):
        while scores[questionnumber] <2:
                questions.append(mylines[linenumber])
              # ^^^ this line

这似乎是一个复制粘贴错误。在此处附加到questions没有多大意义,因为它应该已经在#Seperate代码之后完全填充。我建议删除这一行。