1
resposta

Faça como eu fiz: calculando a idade

Julia é professora e precisa de um programa para ajudar seus alunos a calcularem suas idades com base no ano de nascimento. Sua tarefa é criar uma função que receba o ano de nascimento e o ano atual e retorne à idade correspondente.

Exemplo de entrada:

Digite o ano de nascimento: 2005  

Digite o ano atual: 2025 

Saída esperada:

A idade é 20 anos. 
from datetime import date

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

nome = input("Digite o nome do aluno: ")
ano = int(input("Digite o ano de nascimento: "))
mes = int(input("Digite o mês de nascimento: "))
dia = int(input("Digite o dia de nascimento: "))

data_atual = date.today()

data_nascimento = date(ano, mes, dia)

idade = calcular_idade(data_nascimento, data_atual)
print(f'{nome} tem {idade} anos.')

Digite o nome do aluno: Manuela
Digite o ano de nascimento: 1998
Digite o mês de nascimento: 06
Digite o dia de nascimento: 25
Manuela tem 27 anos.
1 resposta

Olá, Andressa. Como vai?

Uau, que resolução espetacular! Você foi muito além do que o enunciado pedia e entregou um código com nível de maturidade digno de produção.

A maioria das pessoas resolveria esse desafio fazendo apenas uma subtração simples de anos (ano_atual - ano_nascimento). O grande problema dessa abordagem simples é que ela erra a idade caso a pessoa ainda não tenha feito aniversário no ano corrente.

Você resolveu isso de forma brilhante ao importar a biblioteca datetime e utilizar a comparação de tuplas de mês e dia:

if (data_atual.month, data_atual.day) < (data_nascimento.month, data_nascimento.day):
    idade -= 1

Essa linha é um truque elegantíssimo no Python! Como o Python compara tuplas elemento por elemento, se o mês atual for menor que o de nascimento (ou se for o mesmo mês, mas o dia atual for menor), a condição é verdadeira e o código subtrai corretamente 1 ano da idade.

Para enriquecer o seu projeto e fixar ainda mais as boas práticas, separei duas pequenas observações sobre o seu código:


1. Um Pequeno Ajuste no Enunciado vs. Sua Implementação

No início do exercício, o enunciado da atividade propõe uma função simplificada que recebe apenas o ano de nascimento e o ano atual:

def calcular_idade(ano_nascimento, ano_atual):
    return ano_atual - ano_nascimento

Como a sua lógica com date.today() ficou infinitamente melhor e mais precisa para o mundo real, você acabou deixando o parâmetro data_atual dinâmico dentro do script, o que é ótimo!

Mas vale notar um detalhe: na assinatura da sua função, você pede data_atual como parâmetro, mas no fluxo do programa você já captura data_atual = date.today() do lado de fora. Uma boa prática de design de código seria capturar a data atual diretamente dentro da função, deixando a chamada dela ainda mais limpa:

from datetime import date

def calcular_idade(data_nascimento):
    # A própria função descobre o dia de hoje
    data_atual = date.today()
    idade = data_atual.year - data_nascimento.year
    
    if (data_atual.month, data_atual.day) < (data_nascimento.month, data_nascimento.day):
        idade -= 1
    return idade

2. Deixando as Saídas Prontas para a Professora Julia

A sua saída final ficou ótima (Manuela tem 27 anos.). Caso você queira adaptá-la exatamente para o padrão que o sistema da escola ou o exercício pediu ("A idade é X anos."), você pode ajustar o seu print final ou colocar a formatação direto na função:

# Adaptando a saída para o formato esperado pelo exercício
print(f'A idade é {idade} anos.')

Parabéns pelo domínio técnico, pelo uso correto do tipo date e pela sacada lógica de validação do aniversário. O seu código ficou excelente!

Espero que possa ter lhe ajudado!