[Tutor] creating a dictionary for capital quiz program
Peter Otten
__peter__ at web.de
Tue Jun 2 16:15:15 CEST 2015
ZBUDNIEWEK. JAKUB wrote:
> I'm a newbie, but was able to tune it to correctly reply to user inputs.
> 2. Why (on Windows) do I have to give inputs in quotes not to cause an
> error (for ll input the error is ' NameError: name 'll' is not defined')?
If you are running the script under Python 2 you should use
raw_input() instead of input(). input() will take the user input and also
run eval() on it:
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> input("? ")
? 1 + 1
2
>>> raw_input("? ")
? 1 + 1
'1 + 1'
Python 3 has no raw_input() and input() will behave like raw_input() in
Python 2.
> 1. My question is can it be optimized in any way?
In Python 2 capital.keys() builds a list. You can avoid that by iterating
over the dict directly:
for k in capitals:
...
Not an optimization, but if the user enters neither Y nor N you might ask
again instead of assuming Y.
> def main():
>
> right = 0
> wrong = 0
> capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', "Arizona":
> 'Phoenix', \
> 'Arkansas': 'Little Rock', 'California': 'Sacramento', \
> 'Colorado': 'Denver', 'Connecticut': 'Hartford',
> 'Delaware': 'Dover', \ 'Florida': 'Tallahassee', \
> 'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', \
> 'Idaho': 'Boise', \
> 'Illinois': 'Springfield', 'Indiana': 'Indianapolis', \
> 'Iowa': 'Des Moines', \
> 'Kansas': 'Topeka', 'Kentucky': 'Frankfort', \
> 'Louisiana': 'Baton Rouge', \
> 'Maine': 'Augusta', 'Maryland': 'Annapolis', \
> 'Massachusetts': 'Boston', \
> 'Michigan': 'Lansing', 'Minnesota': 'Saint Paul', \
> 'Mississippi': 'Jackson', \
> 'Missouri': 'Jefferson City', 'Montana': 'Helena', \
> 'Nebraska': 'Lincoln', \
> 'Nevada': 'Carson City', 'New Hampshire': 'Concord', \
> 'New Jersey': 'Trenton', \
> 'New Mexico': 'Santa Fe', 'New York': 'Albany', \
> 'North Carolina': 'Raleigh', \
> 'North Dakota': 'Bismarck', 'Ohio': 'Columbus', \
> 'Oklahoma': 'Oklahoma City', \
> 'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', \
> 'Rhode Island': 'Providence', \
> 'South Carolina': 'Columbia', \
> 'South Dakota': 'Pierre', 'Tennessee': 'Nashville', \
> 'Texas': 'Austin', 'Utah': 'Salt Lake City', \
> 'Vermont': 'Montpelier', \
> 'Virginia': 'Richmond', 'Washington': 'Olympia', \
> 'West Virginia': 'Charleston', \
> 'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}
>
> for k in capitals.keys():
> state = input('Enter the capital of '+k+' :')
> if state.upper() == capitals[k].upper():
> right += 1
> print('Correct')
> else:
> wrong += 1
> print('Incorrect')
> choice = input('Do you want to play again y/n: ')
> if choice.upper() == 'N':
> print('end of game')
> break
> elif choice.upper() != 'Y':
> print("invalid choice")
>
> print('Number of correct answers is: ', right)
> print("Number of incorrect answers is:", wrong)
>
> main()
>
> Regards,
> Jakub
More information about the Tutor
mailing list