我正在努力制作一个琐事游戏,唯一的问题是我很难检查正确的答案。这是我的一个问题的代码
Question2 = random.choice(mylist)
print (Question2)
Userinput = input()
if(Question2.position == Question2answer.position):
print('Yes, that is correct!')
else:
print('Sorry, wrong answer')
mylist.remove(Question2)
我试图通过检查列表中的位置来检查用户为问题2提出的问题是问题2的答案而不是4。
答案 0 :(得分:1)
简单的解决方案是为作业使用正确的数据类型。
例如,如果您的mylist
是(question, answer)
对的列表,而不是有两个单独的列表;
Question2, Answer2 = random.choice(mylist)
print(Question2)
Userinput = input()
if Userinput == Answer2:
print('Yes, that is correct!')
else:
print('Sorry, wrong answer')
mylist.remove((Question2, Answer2))
或者,使用字典而不是列表:
Question2 = random.choice(mydict)
print(Question2)
Userinput = input()
if Userinput == mydict[Question2]:
print('Yes, that is correct!')
else:
print('Sorry, wrong answer')
del mylist[Question2]
为什么dict更好?好吧,首先,对于一个列表,你必须反复搜索列表以找到你想要的值 - 例如,mylist.remove
从头开始,并将每个元素与你的值进行比较,直到找到正确的值。除了缓慢而且过于复杂之外,如果您可以拥有重复的值(例如,尝试a = [1, 2, 3, 1]
,然后value = a[0]
,然后a.remove(value)
,看看会发生什么......),这是错误的。
但是如果你不能改变数据结构,你可以随时使用zip
将一对单独的列表压缩成一个单独的对列表:
Question2, Answer2 = random.choice(zip(mylist, myanswers))
print(Question2)
Userinput = input()
if Userinput == Answer2:
print('Yes, that is correct!')
else:
print('Sorry, wrong answer')
mylist.remove(Question2)
myanswers.remove(Answer2)
答案 1 :(得分:0)
您可以使用namedtuple作为数据容器。
from collections import namedtuple
import random
Question = namedtuple('Question', ['question', 'answer'])
questions = [
Question('Question 1', 'Answer 1'),
Question('Question 2', 'Secret'),
Question('Question 3', '3'),
]
q = random.choice(questions)
print("%s ?" % q.question)
user_input = raw_input().strip()
if(q.answer == user_input):
print('Yes, that is correct!')
else:
print('Sorry, wrong answer')
questions.remove(q)