我有一个 if 语句来检查一个数字,然后相应地返回一个字符串值。
代码:
def get_weekday(day):
if day in ['1', 1]:
return 'Monday'
elif day in ['2', 2]:
return 'Tuesday'
elif day in ['3', 3]:
return 'Wednesday'
elif day in ['4', 4]:
return 'Thursday'
elif day in ['5', 5]:
return 'Friday'
elif day in ['6', 6]:
return 'Saturday'
elif day in ['7', 7]:
return 'Sunday'
return 'Invalid day selected'
这个问题可能看起来很主观,但我认为应该有一种pythonic并且更好、更短、更干净的方式来写这个。
请您参考如下方法:
相反,我会做的是创建一个字典,并将您的 day 转换为单一类型,然后在您的字典中查找它。这大大减少了您的代码:
def get_weekday(day):
days_dict = {
'1': 'Monday',
'2': 'Tuesday',
'3': 'Wednesday',
'4': 'Thursday',
'5': 'Friday',
'6': 'Saturday',
'7': 'Sunday'
}
return days_dict.get(str(day), 'Invalid day selected')
所以,上面的函数中发生了什么,你传递的是你的 day,不管你是将它作为字符串还是 int 传递,转换都是作为 str 已经。你的字典现在为你保存了映射,查找将花费 O(1)。
get 方法将返回 None 如果它没有在您的字典中找到条目。但是,根据您的要求,您希望为无效条目返回 Invalid day selected。 get 将接受一个额外的参数,如果提供的 key 无效,该参数将被返回。
下面是可能出现的不同情况以及函数行为方式的演示:
>>> print(get_weekday(2))
Tuesday
>>> print(get_weekday('5'))
Friday
>>> print(get_weekday("invalid_thing"))
Invalid day selected
