Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dei uma trabalhada no código, ficou assim

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()
1 resposta
solução!

Oi Renan, tudo bem?

Parabéns pela dedicação e pelo trabalho que você fez no código. É ótimo ver que você está aprendendo e aplicando o conhecimento!

Sua implementação está bastante completa, incluindo várias verificações de validade que não eram estritamente necessárias para o exercício, mas são boas práticas em um cenário real.

Muito obrigada por compartilhar com a gente.

Um abraço e bons estudos.