匹配单独列表中的问题和答案

时间:2017-09-02 14:14:15

标签: python list

我有一大堆措辞数字作为问题,如果一轮中的问题数不是10,则需要将它们添加到另一轮中,因为上一轮的错误答案被添加到第二轮。我可以将问题添加到第2轮,但如何将问题与单独列表中的答案相匹配?或者我可以将它们放在同一个列表中吗?

extraquestions=[]
extraanswers=[]

q30='two thousand and two'
a30='2002'
extraquestions.append(q30)
extraanswers.append(a30)

x = len(round2questions)
while x != 10:
    round2questions.append(extraquestions[random.randint(0,18)])

我还有19个额外的问题

3 个答案:

答案 0 :(得分:1)

最好将每个问题分组并用元组进行分组,例如,您将拥有extraquestions = [('three',3),('twelve',12),...,('two thousand and two',2002)]。然后,您可以将(question,answer)对添加到round2questions列表中。

否则,如果您希望保留两个单独的列表,我猜您可以将随机索引保存到变量中以获取问题和答案。顺便说一句,你不应该在循环条件中使用变量x,因为它不会刷新"刷新"每个append

while len(round2questions) != 10:
    i = random.randint(0,18)
    round2questions.append(extraquestions[i])
    round2answers.append(extraanswers[i])

答案 1 :(得分:1)

我不喜欢while循环,没有任何while循环可以做到for循环不能做得更好。

您可以通过将while循环更改为

来节省一些麻烦
for x in range(9):

让我解释为什么这更好。 while循环对你的例子有好处,但是当你开始进入更多细节时,循环有问题,他们可能永远不会结束。使用for循环,你会给出一个特定的中断条件,除非你的断点是len(someList)并且你增加了列表,否则它总会在某个时刻得到满足。 x将在循环结束时以0递增1开始,当x达到10时循环结束。

如果您使用

while len(someList) != 10

如果列表的长度从未为10,该怎么办?然后循环永远不会结束。 for循环以增量方式工作,while循环在布尔逻辑中工作。主要是说明循环:

while True:
    if "some variable" == "some condition":
        break
    else: 
        "perform a task"

答案 2 :(得分:0)

嗯。这就是我将你的问题放在一起的方式:
1)你有一些措辞和答案:

round1questions=["two thousand and two", "one thousand and one"] # and more
round2answers=["2002", "1001"] # and more

2)根据我对你的问题的理解,在每一轮中,都会询问TEN问题,并提出TEN答案...... 3)如果任何问题得到错误答案,则在另一轮中再次询问错误回答的问题。

所以这是我解决问题的方法:

questions=["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
answers=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
ans_correct=[None, None, None, None, None, None, None, None, None, None]

#You can use this method to add "None" to the ans_correct list if you have many questions
#and you're too lazy to write so many "None"s.
'''
ans_correct=[]
for each in questions:
    ans_correct.append(None)
'''

while (False in ans_correct) or (None in ans_correct):
    for each in questions:
        if ans_correct[questions.index(each)]!=True:
            ans=str(input("What is the numerical form of %s?" %(each)))
            if ans==answers[questions.index(each)]:
                print("Correct!")
                ans_correct[questions.index(each)]=True
            else:
                print("Wrong!")
                ans_correct[questions.index(each)]=False

基本上,上面的代码会一直问你问题,直到所有的答案都是正确的。如果错误地回答了任何问题,将再次询问他们。