Python 选择一个随机奇数并将其内容添加到不起作用的列表中的程序

Python 选择一个随机奇数并将其内容添加到不起作用的列表中的程序,python,list,Python,List,我正在尝试创建一个代码,它将选择一个随机数,然后使用该随机数将文本文件中特定行的内容放入列表中 我不希望一个问题被添加到列表中不止一次,因此我制作了另一个列表,其中包含所有已选择的数字。所有的问题都在奇数行上,答案在偶数行上,所以生成的数字也必须是偶数 下面的代码是我试图做的,但没有运行 import random #the empty question list qlist=[0,0,0,0,0] #the list that is filled with question numbers

我正在尝试创建一个代码,它将选择一个随机数,然后使用该随机数将文本文件中特定行的内容放入列表中

我不希望一个问题被添加到列表中不止一次,因此我制作了另一个列表,其中包含所有已选择的数字。所有的问题都在奇数行上,答案在偶数行上,所以生成的数字也必须是偶数

下面的代码是我试图做的,但没有运行

import random

#the empty question list
qlist=[0,0,0,0,0]
#the list that is filled with question numbers that have already been chosen
noschosen=[]
file=open('questiontest.txt')
lines=file.readlines()
i=0
#random question chooser
while i<len(qlist):
    chosen=False
    n=random.randint(1,10)
    for index in range(0,len(noschosen)):
        if n==noschosen[index]:
            chosen=True
    #all questions are on odd lines, so the random number can't be even.
    while n%2==0 or chosen==True:
        n=random.randint(1,10)
    #the number chosen is added to the chosen list
    noschosen.append(n)
    #the program adds the question and its answer to qlist
    qlist[i]=(lines[n],lines[n+1])
    #increment
    i=i+1

print (qlist)
第一行上的点是有意的

我希望程序以这种方式随机填写列表:

[('QuestionA', 'AnswerA'), 
 ('QuestionB', 'AnswerB'),
 ('QuestionC', 'AnswerC'),
 ('QuestionD', 'AnswerD'),
 ('QuestionE', 'AnswerE')]
字母A.B.C、D和E代表1到10之间的任何一个数字。例如,如果第一个n原来是5,“问题3”和“答案3”将放在第一位(因为第5行是问题3所在的位置)


问题编号及其对应的答案应分组在一起。我不知道为什么我当前的代码不起作用,有人能看到这个问题吗,或者我可以如何改进代码吗?

你只是在检查你得到的第一个随机数上是否已经选择了这个数字,然后在这段时间内生成随机数

while n%2==0 or chosen==True:
    n=random.randint(1,10)
但千万不要检查是否已经选择了新号码


此外,您还可以使用
if n in noselected
或make
selected=n in noselected
检查是否选择了数字,并避免for循环。最重要的是,您的行号最多为20,但您只能从前10个行号中进行选择。更好的是,甚至不用麻烦允许偶数:取一个随机数1-10,然后从中导出行号:

q_line = 2*n - 1
问题在
行[q_行]
处,答案在下一行



在您同时攻击20行代码之前,您应该学习一些较小的技术,以使您的生活更轻松。大多数代码都可以替换为
random.sample
,该方法只需从列表中返回5个随机项即可。如果您将问题和答案组合成一个成对的列表(元组),那么您可以简单地告诉
sample
,您想从该列表中获取五对。请参阅。

欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。“代码不工作”不是一个问题规范。
q_line = 2*n - 1