我对编程非常陌生(已经学习了大约两周),我的目标是最终设计一个修订版式的多项选择测验,随机生成问题并重复你错误的问题。
我能做到这一点,但是我走到了尽头!我希望用户可以在正确完成整组问题后再次重复问题集。
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"
后再询问是否要再次启动。
任何帮助都会非常感激 - 但请记住,我对此非常陌生。我可以使用if
,while
,for
,数组 - 所以如果它需要更多才能使其正常工作,我还需要做一些额外的工作!
答案 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发布一个新问题来学到很多东西。