2015-02-19 4 views
0

Я довольно новичок в python, и я пытаюсь сделать программу частью проекта. Я пытаюсь заставить программу проверять входные данные пользователей, если это один из ключей словаря.Проверка действительных входов

# dictionary linking month number to month name 
months = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 
      7: 'Jul', 8: 'Aug', 9: 'Sep', 10:'Oct', 11: 'Nov', 12: 'Dec'} 
# print out all the numbers and names 
for num, name in months.items(): 
    print (str(num) + ": " + name) 
monthChosen = input("Enter the number of a month (1-12)") 
valid = False 
while not valid: 
    # make sure the user has chosen one of the correct numbers 
    if monthChosen in months.keys(): 
     valid = True 
    else: 
     monthChosen = input("Make sure you enter a number (1-12)") 
# return the number (int) of the month chosen 
return int(monthChosen) 

Однако иногда, когда я вводим действительный номер, он работает, а в других случаях - нет.

EDIT: Я использую Python 3

+2

заменить input() на int (input()) –

+0

Вы используете Python 2 или Python 3? Они отличаются синтаксисом 'print' и результатом' input() '. – deltab

+0

Что происходит, когда он не работает? – deltab

ответ

1

Я предполагаю, что вы используете Python 3.

ввода принимает «строку», введенную пользователем, «строки» - словарных ключи «ints». Просто добавьте int() в начало каждого входного вызова, чтобы исправить его.

# dictionary linking month number to month name 
months = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 
      7: 'Jul', 8: 'Aug', 9: 'Sep', 10:'Oct', 11: 'Nov', 12: 'Dec'} 
# print out all the numbers and names 
for num, name in months.items(): 
    print (str(num) + ": " + name) 
monthChosen = int(input("Enter the number of a month (1-12)")) 
valid = False 
while not valid: 
    # make sure the user has chosen one of the correct numbers 
    if monthChosen in months.keys(): 
     valid = True 
    else: 
     monthChosen = int(input("Make sure you enter a number (1-12)")) 
# return the number (int) of the month chosen 
return int(monthChosen) 
+0

Это работает в первый раз, но если я вводим число не в диапазоне (1-12), а затем, когда он говорит мне попробовать еще раз, он не работает, когда я ввожу действительный номер. – Slekster

1

вы можете использовать TRY блок, как это:

try: 
    if int(monthChosen) in range(1,13): #OR if int(monthChosen) in month.keys() 
     # do your stuff 
except: 
    # show warning 
+0

Возможно, вы захотите добавить, почему вы используете блок try-except, потому что int() вызывает исключение, если он пытается преобразовать любую нечисловую строку –

+0

Итак, в диапазоне первый член является включительным и он последний эксклюзив? – Slekster

+0

да, вы правы – Hackaholic

0

Вот завершенный пример кода, который поможет вам. Вы можете использовать диапазон (1,13), но если вы хотите реплицировать этот же код для другого использования, функция months.items() работает лучше. Кроме того, «если не в» устраняет необходимость в цикле while более эффективным способом.

# dictionary linking month number to month name 
months = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 
      7: 'Jul', 8: 'Aug', 9: 'Sep', 10:'Oct', 11: 'Nov', 12: 'Dec'} 
# print out all the numbers and names 
for num, name in months.items(): 
    print (str(num) + ": " + name) 

monthChosen = input("Enter the number of a month (1-12)") 

if monthChosen not in months.keys(): 
    monthChosen = input("Make sure you enter a number (1-12)") 
    if monthChosen not in months.keys(): 
     print "You failed to properly enter a number from (1-12)" 
    else: 
     print int(monthChosen) 
else: 
    print int(monthChosen) 
Смежные вопросы