编写一个函数或程序,需要字符串输入,完全拼写,英语月份名称首字母大写:January
,February
,March
等(空/ CR / LF终止OK,分隔与一些非字母字符,如果你选择),要么
比较两个输入,如果第二个输入(按月顺序)大于第一个输入,则返回True值。相等的值导致Falsey值
或按时间顺序对它们的任意序列(列表,定界字符串等)进行排序
(挑战的症结在于定义一种方法/表达式,以给出正确的词典编排排序。某些语言对另一种语言的回答可能较短)
您不能使用任何内部时间解析方法(例如strptime
)将月份名称转换为数字或预设的月份名称映射。使用字符串本身的属性,您定义的简约查找表或更巧妙的方法。
例
正常运行的示例,尽管规则禁止使用第一个示例...
import datetime
def is_later_month(a, b):
'''
Example of prohibited code because it relies on language
features about how to parse month names
'''
return datetime.strptime(a, '%B') < datetime.strptime(b, '%B')
以下版本是可以的,因为我们将信息编码
months = {
'January': 1, 'February': 2, 'March': 3,
'April': 4, 'May': 5, 'June': 6,
'July': 7, 'August': 8, 'September': 9,
'October': 10, 'November': 11, 'December': 12,
}
def is_later_month(a, b):
"""
Returns True/False when comparing two months.
"""
return months[a] < months[b]
或者您可以执行排序功能
months = {'as above...'}
def sort_months(l):
"""
Sorts list and returns it. Different input and output than the above,
but equally valid. Sorting versus comparing might be shorter in your
favorite language.
"""
return sorted(l, key=lambda x: months[x])
测试示例
assert is_later_month('January', 'February')
assert is_later_month('January', 'December')
assert is_later_month('November', 'December')
assert not is_later_month('July', 'July')
assert not is_later_month('October', 'September')
months
列出了所有月份的名称,则我想禁止这样months[x] < months[y]
做。月份名称列表具有一些更特殊的功能(长度,通用性),这使得对随机生成的字符串的挑战更容易/更困难。