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