多项选择测验重复您已经错误的答案,然后在您正确回答所有答案后重新开始

时间:2014-06-01 17:20:21

标签: python string

我对编程非常陌生(已经学习了大约两周),我的目标是最终设计一个修订版式的多项选择测验,随机生成问题并重复你错误的问题。

我能做到这一点,但是我走到了尽头!我希望用户可以在正确完成整组问题后再次重复问题集。

import random
p2_qns = []
p2_qns.append(["what is 1?", "a", "b", "c", "d", "a"])
p2_qns.append(["what is 2?", "a", "b", "c", "d", "b"])
p2_qns.append(["what is 3?", "a", "b", "c", "d", "c"])

end_2 = False
zero = [0]*len(p2_qns)

def questions():
   end_1 = False
    while end_1 == False:
        p2_qnsc = p2_qns
        #This section picks a random question and asks it
        qn = random.randrange(len(p2_qnsc))
        #this if statement checks to see if the question has alread been          answered correctly.
        if p2_qnsc[qn] != 0:            
            print(p2_qnsc[qn][0],p2_qnsc[qn][1],p2_qnsc[qn][2],p2_qnsc[qn] [3],p2_qnsc[qn][4] )
            #ask for answer and compare it to where the answer is stored
            ans = input("answer:")
            if ans.lower() == p2_qnsc[qn][5]:
                print("correct!")
                #if answer is correct set the whole question to 0 to stop it being asked again
                p2_qnsc[qn] = 0    
            else:
               print("wrong!")
        elif p2_qnsc == zero:
            end_1 = True

while end_2 == False:            
    questions()
    ans = input("Whant to go again? y,n :")
    if ans.lower() == "n":
        end_2 = True
    elif ans.lower() == "y":
        print("starting again")

到目前为止,我的代码会询问我的3个问题,如果回答不正确则重复这些问题,但是一旦他们全部接听,只会在您选择"y"后再询问是否要再次启动。

任何帮助都会非常感激 - 但请记住,我对此非常陌生。我可以使用ifwhilefor,数组 - 所以如果它需要更多才能使其正常工作,我还需要做一些额外的工作!

1 个答案:

答案 0 :(得分:0)

问题在于您完全从列表中删除问题。相反,将它们标记为已回答。为此,您需要为每个问题添加一个插槽来跟踪此信息。在构建问题列表时,添加第七个插槽并为其指定值False

p2_qns.append(["what is 1?", "a", "b", "c", "d", "a", False])
p2_qns.append(["what is 2?", "a", "b", "c", "d", "b", False])
p2_qns.append(["what is 3?", "a", "b", "c", "d", "c", False])

当用户得到正确答案时,请将其标记为:

p2_qnsc[qn] = 0

变为

p2_qnsc[qn][6] = True

在测试是否有问题时,请检查此字段:

if p2_qnsc[qn] != 0:

变为

if not p2_qnsc[qn][6]:

最后,当用户决定再次回答问题时,请清除上面所做的更改:

for question in p2qnsc:
    question[6] = False
  

注意:p2_qns分配给p2_qnsc不会复制列表。您对其所做的所有更改都是p2_qns,因为它们都引用了相同的列表。因此,您可以将所有p2_qnsc替换为p2_qns并删除p2_qnsc = p2_qns行。

     

有很多机会可以改进这些代码,并且有更好的方法来减少问题列表,以避免反复选择相同的已经回答的问题(循环中的随机性),但这将涉及字典。一旦你有这个代码工作,你可以通过向Code Review发布一个新问题来学到很多东西。