首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测验程序中的IndexError

测验程序中的IndexError
EN

Stack Overflow用户
提问于 2014-04-24 03:02:44
回答 1查看 115关注 0票数 0

我在为我儿子的复习作业创建测验时遇到了一些问题。这是一个阅读文本文件的测验,并以随机顺序显示问题。当他回答了每个问题两次时,测验就结束了。

所以他可以给自己计时,我该如何在其中添加计时器,计时器在显示第一个问题时开始,并在他两次正确回答每个问题时打印出来?我使用的是python 3.3。

以下是到目前为止的代码:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-04-24 03:32:12

代码语言:javascript
运行
复制
questionnumber = random.randint(0,len(questions))

randint是包含的,所以它可以返回len(questions)之前的任何数字。如果它返回最大可能的数字,那么您将得到一个IndexError。例如,如果questions是三个元素的长度,那么questions[3]将超出范围。

缩小随机数的允许范围:

代码语言:javascript
运行
复制
questionnumber = random.randint(0,len(questions)-1)

编辑:在您的#ask question循环中似乎也有一个拼写错误,这导致questionsanswers更大。

代码语言:javascript
运行
复制
for questionnumber in range(0,len(questions)):
        while scores[questionnumber] <2:
                questions.append(mylines[linenumber])
              # ^^^ this line

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23253041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档