2013-06-09 5 views
0

Я написал функцию, содержащую словарь сокращенных дней недели, до полного имени дня. Я получаю правильный выходной день, когда я печатаю аббревиатуру, но для того, чтобы попробовать другое сокращение, мне нужно повторно ввести функцию.Как повторить ввод после ввода ввода?

у меня есть:

def weekday() 
    day = input('Enter day abbreviation ') 
    days = {'Mo':'Monday','Tu':'Tuesday', 
      'we':'Wednesday', 'Th':'Thursday', 
      'Fr':'Friday', 'Sa':'Saturday','Su':Sunday'} 
    while day in days: 
     print(days.get(day)) 

У меня есть проблема в том, что она печатает полное имя день снова и снова, и вместо этого я хочу, чтобы напечатать полное название дня, затем распечатать «Введите день аббревиатуру» еще раз.

Он должен выглядеть следующим образом:

>>>weekday(): 
Enter day abbreviation: Tu 
Tuesday 
Enter day abbreviation: Su 
Sunday 
Enter day abbreviation: 
... 

Вместо этого, я получаю:

>>>weekday(): 
Enter day abbreviation: Tu 
Tuesday 
Tuesday 
Tuesday 
Tuesday 
Tuesday 
... # it continues without stopping 

Я знаю, что это очень простое решение, но я не могу понять это.

+1

Возможный дубликат [как сделать сырой \ _input повторять, пока я не хочу уйти?] (Http://stackoverflow.com/questions/1781445/how-to-let-a-raw-input-repeat-until- i-wanna-quit) – kirelagin

ответ

3

Вы никогда не перечитываете «день», поэтому «в то время как днем ​​в днях» всегда верно и выполняется бесконечно.

def weekday() 
    day = input('Enter day abbreviation ') 
    days = {'Mo':'Monday','Tu':'Tuesday', 
      'we':'Wednesday', 'Th':'Thursday', 
      'Fr':'Friday', 'Sa':'Saturday','Su':'Sunday'} 
    while day in days: 
     print(days.get(day)) 
     day = input('Enter day abbreviation ') 
+0

Спасибо! Я не знаю, почему я об этом не думал. Так просто – M15671

2

Вы хотите, чтобы получить вход снова в каждой итерации:

while True: 
     day = input('Enter day abbreviation ') 
     acquired_day = days.get(day) 
     if acquired_day is None: break 
     print(acquired_day) 
2
days = {'Mo':'Monday','Tu':'Tuesday', 
     'we':'Wednesday', 'Th':'Thursday', 
     'Fr':'Friday', 'Sa':'Saturday','Su':'Sunday'} 
while True: 
    day = input('Enter day abbreviation ') 
    if day in days: 
     print (days[day]) 
    else: 
     break 

выход:

$ python3 so.py 
Enter day abbreviation Mo 
Monday 
Enter day abbreviation Tu 
Tuesday 
Enter day abbreviation we 
Wednesday 
Enter day abbreviation foo 

Другой способ использования dict.get:

days = {'Mo':'Monday','Tu':'Tuesday', 
     'we':'Wednesday', 'Th':'Thursday', 
     'Fr':'Friday', 'Sa':'Saturday','Su':'Sunday'} 
obj = object()        #returns a unique object 
day = input('Enter day abbreviation ') 
while days.get(day,obj) != obj: 
    print (days[day]) 
    day = input('Enter day abbreviation ') 
+1

он ожидает выйти, если день не в днях, так как неправильное состояние цикла ... – zmo

+0

@zmo Я уже исправил это. –

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