选择一个随机奇数并将其内容添加到无法使用的列表的程序

时间:2019-01-30 00:03:44

标签: python list

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

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

下面的代码是我尝试执行的操作,但无法运行。

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)

这是下一个文件中的内容:

.
Question1
Answer1
Question2
Answer2
Question3
Answer3
Question4
Answer4
Question5
Answer5
Question6
Answer6
Question7
Answer7
Question8
Answer8
Question9
Answer9
Question10
Answer10

第一行上的点是故意的。

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

[('QuestionA', 'AnswerA'), 
 ('QuestionB', 'AnswerB'),
 ('QuestionC', 'AnswerC'),
 ('QuestionD', 'AnswerD'),
 ('QuestionE', 'AnswerE')]

字母AB C,D和E表示从1到10的任何数字。例如,如果第一个n变为5,则“ Question3”和“ Answer3”将放在第一位(因为第5行是Question3所在的位置。

问题编号及其对应的答案应分组在一起。我不确定为什么我当前的代码无法正常工作,有人能看到这个问题,或者我一般如何改善此代码吗?

2 个答案:

答案 0 :(得分:0)

您仅在检查是否已根据所获得的第一个随机数选择了该数字,然后在此期间生成随机数

while n%2==0 or chosen==True:
    n=random.randint(1,10)

但切勿检查是否已选择新号码。

您还可以使用if n in noschosen或选择chosen = n in noschosen检查是否选择了该数字,并避免for循环

答案 1 :(得分:0)

最重要的是,行号最多可以增加20个,但您只能从前10个中选择。更好的是,甚至不必打扰允许偶数:随机取1-10,然后从中得出行号:

q_line = 2*n - 1

问题在lines[q_line],答案在下一行。


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