Dediquei umas boas horas aqui e aprendi umas coisas bacanas, aceito sugestões e melhorias.
from datetime import date
class Data:
def __init__(self, dia, mes, ano):
try:
# Verifica se o usuário colocou valores errados, como 006 no dia ou anos inválidos.
if len(dia) > 2 or len(mes) > 2 or len(ano) > 4:
raise ValueError("Digite dois dígitos para o dia e mês, e quatro dígitos para o ano.")
else:
# Passa os valores para inteiros.
self.dia = int(dia)
self.mes = int(mes)
self.ano = int(ano)
except ValueError:
mensagem_de_erro('Letras não são aceitas. Informe somente valores')
main()
def numero_invalidos(self):
# Função que inicia os processos de verificação dos valores:
if not 1 <= self.dia <= 31 or not 1 <= self.mes <= 12 or self.ano <= 0:
mensagem_de_erro('Valores inseridos na data são inválidos.')
else:
self.meses_especiais()
def meses_especiais(self):
# Função para tratar quantidade errada de dias nos meses.
if self.mes == 2 and self.dia > 28:
mensagem_de_erro('Número de dias errado para o mês de fevereiro')
elif self.mes in [4, 6, 9, 11] and self.dia > 30:
mensagem_de_erro(f'O mes {self.mes} tem somente 30 dias.')
else:
self.formata()
def formata(self):
# Função que formata a data pro padrão desejado.
data_formatada = date(self.ano, self.mes, self.dia).strftime("%d/%m/%Y")
print(f'\n{data_formatada}')
def main():
while True:
try:
opcao_data = int(input('\n[1] Exibir a data atual.\n[2] Digitar uma data\n[3]Sair \n'))
if opcao_data == 1:
print(f'\n{date.today().strftime("%d/%m/%Y")}')
elif opcao_data == 2:
data = Data(input('\nDia: ').strip(), input('Mês: ').strip(), input('Ano: ').strip())
data.numero_invalidos()
elif opcao_data == 3:
break
else:
mensagem_de_erro('Opção inválida.')
except ValueError:
mensagem_de_erro('Letras não são aceitas. Escolha uma das opções informadas.')
def mensagem_de_erro(mensagem):
print(f'\nErro! {mensagem}')
if __name__ == '__main__':
main()