Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Calculando a idade

Boa noite,

Segue o código que foi feito para a resolução da atividade

from datetime import date, datetime


def calcular_idade(data_nascimento, data_atual):
    idade = data_atual.year - data_nascimento.year
    if (data_atual.month, data_atual.day) < (data_nascimento.month, data_nascimento.day):
        idade -= 1
    return idade


def pedir_nome():
    while True:
        nome = input('Digite o seu nome: ').strip()
        if not nome:
            print('O nome não pode ficar vazio.')
        elif not any(c.isalpha() for c in nome) or not all(c.isalpha() or c in " -'" for c in nome):
            print('O nome deve conter apenas letras (espaços, hífen e apóstrofo também são aceitos).')
        else:
            return nome.title()


def pedir_data_nascimento(hoje):
    while True:
        texto = input('Digite a sua data de nascimento (dd/mm/aaaa): ').strip()
        try:
            data = datetime.strptime(texto, '%d/%m/%Y').date()
        except ValueError:
            print('Data inválida! Use o formato dd/mm/aaaa, por exemplo: 25/12/1995.')
            continue

        if data > hoje:
            print('A data de nascimento não pode estar no futuro.')
        elif hoje.year - data.year > 120:
            print('Essa data parece muito antiga. Confira e tente de novo.')
        else:
            return data


def deseja_continuar():
    while True:
        resposta = input('\nDeseja calcular a idade de outra pessoa? (s/n): ').strip().lower()
        if resposta in ('s', 'sim'):
            return True
        if resposta in ('n', 'nao', 'não'):
            return False
        print('Resposta inválida! Digite "s" para sim ou "n" para não.')


def main():
    hoje = date.today()

    while True:
        nome = pedir_nome()
        nascimento = pedir_data_nascimento(hoje)
        idade = calcular_idade(nascimento, hoje)
        unidade = 'ano' if idade == 1 else 'anos'
        print(f'{nome} tem {idade} {unidade}!')

        if not deseja_continuar():
            print('Programa encerrado. Até mais!')
            break


main()
1 resposta

Oi, Laura. Tudo bem com você?

Que legal que você entregou um código bem mais robusto do que o solicitado na atividade. A função de calcular idade está funcionando corretamente, levando em conta não só a diferença de anos, mas também se o aniversário já passou ou não neste ano. Isso mostra que você realmente compreendeu a lógica por trás do cálculo e foi além do esperado.

O que chama atenção no seu trabalho é como você estruturou o programa de forma modular, criando funções específicas para cada responsabilidade. A validação de entrada de dados está bem pensada, desde verificar se o nome não está vazio até garantir que a data de nascimento seja realista. A função deseja_continuar() permite que o programa rode múltiplas vezes sem precisar ser executado novamente, e o tratamento de singularidade e pluralidade da palavra "ano" no output é um detalhe que demonstra atenção aos detalhes. Você também usou strptime() corretamente para fazer o parse da data no formato solicitado e comparou tuplas de mês e dia para validar se o aniversário já passou este ano, o que é uma forma elegante de resolver esse problema.

Considerando que você já implementou validações tão completas, você pensou em adicionar alguma funcionalidade extra, como salvar um histórico das idades calculadas em um arquivo, ou isso não fazia sentido para o contexto que você imaginou?

Parabéns pela entrega, Laura. O fórum está à sua disposição para compartilhar mais soluções ou tirar dúvidas quando precisar.

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