测验程序中的索引器

2024-03-29 08:45:27 发布

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

我在为我儿子准备复习测验时遇到了一些问题。这是一个阅读文本文件,并以随机顺序显示问题的测验。当他把每个问题回答了两遍后,测验就停止了。你知道吗

所以他可以自己计时,我如何在那里添加一个计时器,当第一个问题显示时开始,当他正确回答每个问题两次时打印?我使用的是python3.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

Tags: inforlenrangerandomanswersquestionsprint
1条回答
网友
1楼 · 发布于 2024-03-29 08:45:27
questionnumber = random.randint(0,len(questions))

randint是包含的,因此它可以返回任何小于等于len(questions)的数字。如果它返回尽可能大的数字,那么您将得到一个索引器。例如,如果questions是三个元素长,那么questions[3]将超出范围。你知道吗

减少随机数的允许范围:

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

编辑:在#ask question循环中似乎还有一个输入错误,导致questionsanswers大。你知道吗

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

这似乎是复制粘贴错误。在这里附加到questions没有什么意义,因为它应该已经在#Seperate代码之后完全填充了。我建议去掉这条线。你知道吗

相关问题 更多 >