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!