2017-06-12 68 views
0

我想答案从用户与列表进行比较:如何比较列表中的项目与用户输入?

answers=["Sundar Pichai","Mark Zukenberg","Narendra Modi"] 
print ('Welcome to Quizz!!') 
player_name= raw_input("Enter Your Name:") 
def out_ans(): 
    guess_ans = raw_input("enter your answer:")  
    for ans in answers: 
     if guess_ans.lower() == ans.lower(): 
      print(player_name +" correct answer") 

     else: 
      print(player_name + " its a wrong answer") 
print ("Q.No 1 Who is the present CEO of Google??")    
out_ans() 
print ("Q.No 2 Who is the founder of FaceBook??") 
out_ans() 

这是输出

Welcome to Quizz!! 

Enter Your Name: xyz 
Q.No 1 Who is the present CEO of Google?? 
enter your answer: sundar pichai 
xyz its a correct answer 
xyz its a wrong answer 
xyz its a wrong answer 
Q.No 2 Who is the founder of FaceBook?? 
enter your answer: mark zukenberg 
xyz its a wrong answer 
xyz its a correct answer 
xyz its a wrong answer 
+4

你的代码到底是什么问题? – Ajax1234

+3

是3个输出而不是1个问题?你可能会考虑有一个标志'right = False',如果它们正确,并且只在for循环后面打印,则设置为True – depperm

+0

你也可以在if条件之后添加一个'break'语句。 –

回答

2
answers=["Sundar Pichai","Mark Zukenberg","Narendra Modi"] 
print ('Welcome to Quizz!!') 
player_name= raw_input("Enter Your Name:") 

def out_ans(): 
    guess_ans = raw_input("enter your answer:") 
    if guess_and.lower() in [x.lower() for x in answers]: 
     print(player_name +" correct answer") 
    else: 
     print(player_name + " its a wrong answer") 


print ("Q.No 1 Who is the present CEO of Google??")    
out_ans() 
print ("Q.No 2 Who is the founder of FaceBook??") 
out_ans() 

但你认为什么当我回答第一个问题'Mark Zukenberg'时会发生吗? :)是的,你是对的 - 程序会说它是正确的答案。为了避免这样的情况下,改变你的测验的建筑,以及:

def check_ans(player_ans, valid_answer): 
    result = "correct answer" if player_ans.lower() == valid_answer.lower() else "its a wrong answer" 
    return '{0} {1}'.format(player_name, result) 

quiz = (("Q.No 1 Who is the present CEO of Google??", "Sundar Pichai"), 
     ("Q.No 2 Who is the founder of FaceBook??", "Mark Zukenberg")) 

print('Welcome to Quizz!!') 
player_name = input("Enter Your Name:") 

for question, answer in quiz: 
    player_ans = input(question) 
    print(check_ans(player_ans, answer)) 
+0

返回'{0} {1}'。format(player_name,result)'{0} {1}'需要什么? – mightybeard

+0

它是由格式函数引起的(https://docs.python.org/2/library/stdtypes.html#str.format)。我认为这比连接字符串更好,比如:'player_name +''+ result'。 – biniow

4

我认为你需要打印的邮件只有一次,告知使用者的正确性他的回答。

然后,你需要这样的事:

def out_ans(): 
    guess_ans = raw_input("enter your answer:") 
    correct = False 
    for ans in answers: 
     if guess_ans.lower() == ans.lower(): 
      correct = True 
    if correct: 
     print(player_name +" correct answer") 
    else: 
     print(player_name + " its a wrong answer") 
1

您不必每次打印,当你发现你的回应,回报:

def out_ans(): 
    guess_ans = raw_input("enter your answer:")  
    for ans in answers: 
     if guess_ans.lower() == ans.lower(): 
      #if we find a correct answer, exit 
      print(player_name +" correct answer") 
      return 
    #if didn't find any correct answer 
    print(player_name + " its a wrong answer") 
1

试试这个:

answers=[ "Sundar Pichai", "Mark Zukenberg", "Narendra Modi" ] 
flagGuessWrong = False 
print ('Welcome to Quizz!!') 

player_name = raw_input("Enter Your Name:") 


def out_ans(): 
    guess_ans = raw_input("enter your answer:")  
    for ans in answers: 
    if guess_ans.upper() == ans.upper(): 
     print(player_name +" correct answer") 
     flagGuessWrong = False 
     break 
    else: 
     flagGuessWrong = True 

    if(flagGuessWrong): 
     print(player_name + " its a wrong answer") 


print ("Q.No 1 Who is the present CEO of Google??")    
out_ans() 
print ("Q.No 2 Who is the founder of FaceBook??") 
out_ans() 

这样,它会比较你的阵列上的一切,但请记住,它不会(例如:Q.No 2谁是FaceBook的创始人?=> Narendra Modi(会给出正确的答案))这是因为你正在循环整个数组,并且一旦找到匹配的对,它就会离开(我的修改)。其余的你需要应用一些逻辑,也许是一本字典,以便他能找到键/值对并返回正确的答案。