我试图创建将选择一个随机数的代码,然后使用该数字将文本文件中特定行的内容放入列表中。
我不希望一个问题被多次添加到列表中,因此我创建了另一个列表,其中将包含所有已选择的数字。所有问题都在奇数行上,答案在偶数行上,因此生成的数字也必须是偶数。
下面的代码是我尝试执行的操作,但无法运行。
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所在的位置。
问题编号及其对应的答案应分组在一起。我不确定为什么我当前的代码无法正常工作,有人能看到这个问题,或者我一般如何改善此代码吗?
答案 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。