Написати функцію або програму , яка приймає рядок входи, повністю полби, англійські назви місяців у назві випадку: January
, February
, March
і т.д. (нуль / CR / LF припинено в порядку, розмежовані з деяким не-літерного символу , якщо ви цього хочете) і або
порівнює два входи, повертаючи значення Truthy, якщо другий вхід більший (у місячному порядку), ніж перший. Рівні значення призводять до значення Фальсі
або сортує довільну послідовність (список, обмежений рядок тощо) у хронологічному порядку
(Суть виклику полягає у визначенні методу / вираження, який дає правильну лексикографічну сортування. Деякі мови можуть мати більш коротку відповідь з тією чи іншою)
Ви не можете використовувати будь-які внутрішні методи аналізу часу (наприклад 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]
як відповідь. Перелік назв місяців має деякі більш особливі особливості (різної тривалості, спільності), які роблять складніше / складніше завдання для випадково створених рядків.