Escreva uma função ou programa que leva entradas de string, totalmente escrito, os nomes dos meses Inglês em caso de título: January, February, March, etc. (null / CR / LF encerrado OK, delimitado com alguns caracteres não-alfa se assim preferir) e quer
compara duas entradas, retornando um valor Truthy se a segunda entrada for maior (na ordem do mês) que a primeira. Valores iguais resultam em um valor de Falsey
ou classifica uma sequência arbitrária (lista, sequência delimitada etc.) em ordem cronológica
(O ponto crucial do desafio é definir um método / expressão que dê a classificação lexicográfica correta. Alguns idiomas podem ter uma resposta mais curta com um ou outro)
Você não pode usar nenhum método interno de análise de tempo (por exemplo strptime) para converter o nome do mês em um número ou em um mapeamento pré-definido de nomes de meses. Use as propriedades das próprias strings, uma tabela de consulta parcimoniosa que você definir ou algo inteligente.
Exemplo
Exemplos de funcionamento, embora o primeiro seja proibido pelas regras ...
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')
As versões abaixo estão OK, porque codificamos essas informações
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]
Ou você pode fazer uma função de classificação
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])
Testes de exemplo
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')
monthsque fosse uma lista de todos os nomes de meses, eu gostaria de proibir months[x] < months[y]como resposta. A lista de nomes de meses possui alguns recursos mais peculiares (duração variável, semelhança) que facilitam / dificultam o desafio em relação a cadeias geradas aleatoriamente.