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

我知道这是一个非常简单的解决方案,但我无法弄清楚。

4

3 回答 3

3

你永远不会重读“day”,所以“while day in days”总是正确的,并且会无休止地执行。

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 ' )
于 2013-06-09T16:56:27.993 回答
2

您希望在每次迭代中再次获得输入:

while True:
        day = input('Enter day abbreviation ' )
        acquired_day = days.get(day)
        if acquired_day is None: break
        print(acquired_day)
于 2013-06-09T16:56:54.293 回答
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 ' )
于 2013-06-09T16:56:56.450 回答