2013-12-12 3 views
0

Так что мне нужно создать викторину, которая дает пользователю состояние, и они должны дать мне столицу. Но по какой-то причине, когда я запускаю его, он не удаляет используемые города, как я хочу.Использование словаря для викторины?

Код

import random 
def main(): 
    capitals={"Washington":"Olympia","Oregon":"Salem",\ 
        "California":"Sacramento","Ohio":"Columbus",\ 
        "Nebraska":"Lincoln","Colorado":"Denver",\ 
        "Michigan":"Lansing","Massachusetts":"Boston",\ 
        "Florida":"Tallahassee","Texas":"Austin",\ 
        "Oklahoma":"Oklahoma City","Hawaii":"Honolulu",\ 
        "Alaska":"Juneau","Utah":"Salt Lake City",\ 
        "New Mexico":"Santa Fe","North Dakota":"Bismarck",\ 
        "South Dakota":"Pierre","West Virginia":"Charleston",\ 
        "Virginia":"Richmond","New Jersey":"Trenton",\ 
        "Minnesota":"Saint Paul","Illinois":"Springfield",\ 
        "Indiana":"Indianapolis","Kentucky":"Frankfort",\ 
        "Tennessee":"Nashville","Georgia":"Atlanta",\ 
        "Alabama":"Montgomery","Mississippi":"Jackson",\ 
        "North Carolina":"Raleigh","South Carolina":"Columbia",\ 
        "Maine":"Augusta","Vermont":"Montpelier",\ 
        "New Hampshire":"Concord","Connecticut":"Hartford",\ 
        "Rhode Island":"Providence","Wyoming":"Cheyenne",\ 
        "Montana":"Helena","Kansas":"Topeka",\ 
        "Iowa":"Des Moines","Pennsylvania":"Harrisburg",\ 
        "Maryland":"Annapolis","Missouri":"Jefferson City",\ 
        "Arizona":"Phoenix","Nevada":"Carson City",\ 
        "New York":"Albany","Wisconsin":"Madison",\ 
        "Delaware":"Dover","Idaho":"Boise",\ 
        "Arkansas":"Little Rock","Louisiana":"Baton Rouge"} 

    wrong=[] 

    print ("STATE TEST \n") 


    while len(capitals)>0: 
     pick=random.choice(list(capitals.keys())) 
     correct_answer=capitals.get(pick) 
     print ("What is the capital city of",pick,"?") 
     answer=input("Your answer: ") 
     if answer.lower()==correct_answer.lower(): 
      print ("That's Correct!\n") 
      del capitals[pick] 
     else: 
      print ("That's Incorrect.") 
      print ("The correct answer is",correct_answer) 
      wrong.append(pick) 

    print ("You missed",len(wrong),"states.\n") 


    if incorrect_answers: 
     print ("Here are the ones that you may want to brush up on:\n") 
     for each in wrong: 
      print (each) 
    else: 
     print ("Perfect!") 
main() 
+0

Определите «не удаляющие используемые города, как я хочу». – jazzpi

+0

Когда пользователь догадывается неправильно, вы не удаляете состояние из dict, и пользователь может позже догадаться. Это то, что вы хотите? Кроме того, где определяется 'correct_answers'? – Kevin

+0

Какие у вас есть доказательства того, что он не удаляет правильные ответы? Вы видите повторные выборы? Попробуйте уменьшить начальный 'dict' до 1 или 2 записей, чтобы упростить отладку. – dg99

ответ

2

Проблема заключается в том, что вы удаляете состояние от Dict только тогда, когда ответ является правильным, вы должны удалить его безоговорочно, попробуйте с этим кодом:

import random 
def main(): 
    capitals={"Washington":"Olympia","Oregon":"Salem",\ 
        "California":"Sacramento","Ohio":"Columbus",\ 
        "Nebraska":"Lincoln","Colorado":"Denver",\ 
        "Michigan":"Lansing","Massachusetts":"Boston",\ 
        "Florida":"Tallahassee","Texas":"Austin",\ 
        "Oklahoma":"Oklahoma City","Hawaii":"Honolulu",\ 
        "Alaska":"Juneau","Utah":"Salt Lake City",\ 
        "New Mexico":"Santa Fe","North Dakota":"Bismarck",\ 
        "South Dakota":"Pierre","West Virginia":"Charleston",\ 
        "Virginia":"Richmond","New Jersey":"Trenton",\ 
        "Minnesota":"Saint Paul","Illinois":"Springfield",\ 
        "Indiana":"Indianapolis","Kentucky":"Frankfort",\ 
        "Tennessee":"Nashville","Georgia":"Atlanta",\ 
        "Alabama":"Montgomery","Mississippi":"Jackson",\ 
        "North Carolina":"Raleigh","South Carolina":"Columbia",\ 
        "Maine":"Augusta","Vermont":"Montpelier",\ 
        "New Hampshire":"Concord","Connecticut":"Hartford",\ 
        "Rhode Island":"Providence","Wyoming":"Cheyenne",\ 
        "Montana":"Helena","Kansas":"Topeka",\ 
        "Iowa":"Des Moines","Pennsylvania":"Harrisburg",\ 
        "Maryland":"Annapolis","Missouri":"Jefferson City",\ 
        "Arizona":"Phoenix","Nevada":"Carson City",\ 
        "New York":"Albany","Wisconsin":"Madison",\ 
        "Delaware":"Dover","Idaho":"Boise",\ 
        "Arkansas":"Little Rock","Louisiana":"Baton Rouge"} 

    wrong=[] 

    print ("STATE TEST \n") 

    incorrect_answers = False 

    while len(capitals)>0: 
     pick=random.choice(list(capitals.keys())) 
     correct_answer=capitals.get(pick) 
     print ("What is the capital city of",pick,"?") 
     answer=raw_input("Your answer: ") 
     if answer.lower()==correct_answer.lower(): 
      print ("That's Correct!\n") 
     else: 
      print ("That's Incorrect.") 
      print ("The correct answer is",correct_answer) 
      wrong.append(pick) 
      incorrect_answers = True 
    del capitals[pick] 

    print ("You missed",len(wrong),"states.\n") 


    if incorrect_answers: 
     print ("Here are the ones that you may want to brush up on:\n") 
     for each in wrong: 
      print (each) 
    else: 
     print ("Perfect!") 
main() 

Надеюсь, поможет!

+1

Это вполне возможно намеренное поведение - если вы ошибаетесь, оно возвращается в пул вопросов. Из вопроса неясно, каково желаемое поведение. – Tim

+1

Все дело в том, что он не удаляет используемые города по своему усмотрению, он выглядит достаточно ясно –

Смежные вопросы