我在为儿子修改测验时遇到一些问题。这是一个测验,它读取文本文件,并以随机顺序显示问题。当他回答每个问题两次时,测验就停止了。
所以他可以自己计时,我如何在第一个问题显示的时候添加一个计时器,并在他正确回答每个问题两次后进行打印?我正在使用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
答案 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
代码之后完全填充。我建议删除这一行。