1
resposta

[Sugestão] Faça como eu fiz: calculando a idade

from datetime import date

# Função verifica se a data é válida
def data_valida(dia, mes, ano):
    if mes < 1 or mes > 12:
        return False
    if mes == 2:
        if ano % 4 == 0 and (ano % 100 != 0 or ano % 400 == 0):
            if dia < 1 or dia > 29:
                return False
        else:
            if dia < 1 or dia > 28:
                return False
    elif mes in [4, 6, 9, 11]:
        if dia < 1 or dia > 30:
            return False
    else:
        if dia < 1 or dia > 31:
            return False
    return True

# Função calcular idade do aluno considerando o dia do mês e ano
def calcular_idade(data_nascimento):
    data_atual = date.today()
    idade = data_atual.year - data_nascimento.year - ((data_atual.month, data_atual.day) < (data_nascimento.month, data_nascimento.day))
    return idade

nome_aluno = input("Digite o nome do aluno: ")
while True:
    try:
        data_nascimento = input("Digite a data de nascimento do aluno (dd/mm/aaaa): ")
        dia, mes, ano = map(int, data_nascimento.split('/'))
        if not data_valida(dia, mes, ano):
            print("Data inválida. Tente novamente.")
            continue
        break
    except ValueError:
        print("Formato de data inválido. Tente novamente.")

data_nascimento = date(ano, mes, dia)
data_atual = date.today()
idade = data_atual.year - data_nascimento.year - ((data_atual.month, data_atual.day) < (data_nascimento.month, data_nascimento.day))
print(f"{nome_aluno.capitalize()} tem {idade} anos.")
1 resposta

Olá, Marinaldo, como vai?

O seu código apresenta uma implementação muito completa, indo além do que foi solicitado originalmente ao incluir validações de data. A lógica para calcular a idade considerando o dia e o mês é precisa, pois utiliza a comparação de tuplas para verificar se o aniversário já ocorreu no ano corrente. O uso da biblioteca datetime demonstra um bom domínio das ferramentas nativas do Python para manipulação de datas e o tratamento de exceções com try-except garante que o programa não encerre abruptamente em caso de entradas inválidas.

Parabéns pelo excelente exercício e por compartilhar sua solução com a comunidade. Continue praticando e postando seus projetos. O fórum permanece à sua disposição para futuras dúvidas ou trocas de conhecimento.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!