检查一个列表中的项目的位置到另一个列表

时间:2014-09-15 21:05:45

标签: python list position

我正在努力制作一个琐事游戏,唯一的问题是我很难检查正确的答案。这是我的一个问题的代码

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。

2 个答案:

答案 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)