1
resposta

[Dúvida] def idade()

Testei uma idade e não deu o valor esperado, entrada(28/12/1996) a idade era pra retornar 26, mas subtraindo os anos como o código da aula o test retorna 27 (2023- 1996 = 27). Procurei comparar os dias e meses para retornar um bool.

Tem como eu extrair a data no datetime ou strftime e retornar a idade direto ou alguma outra forma simplificada de mostrar a idade

    def idade(self):
        data_nascimento_quebrada = self._data_nascimento.split('/')
        dia_nascimento = int(data_nascimento_quebrada[0])
        mes_nascimento = int(data_nascimento_quebrada[1])
        ano_nascimento = int(data_nascimento_quebrada[-1])
        data_hoje = date.today()
        idade = data_hoje.year - int(ano_nascimento) - \
                ((data_hoje.month, data_hoje.day) < (mes_nascimento, dia_nascimento))
        return idade
1 resposta

Olá, Keven, Tudo bem?

Sua lógica está no caminho certo para obter o resultado desejado.

Para que tudo funcione do jeito que você espera basta fazer uma pequena alteração no seu código. Você vai calcular a idade subtraindo o ano de nascimento do ano atual. Após isso, você criará uma condição que verifica se o mês atual é menor que o mês de nascimento ou se o dia atual é menor que o dia de nascimento, caso seja verdadeiro, você subtrai 1 da idade. Assim você vai obter a idade correta, levando em consideração o ano, mês e dia de nascimento.

O código ficará parecido com o código a seguir:

def idade(self):
  data_nascimento_quebrada = self._data_nascimento.split('/')
  dia_nascimento = int(data_nascimento_quebrada[0])
  mes_nascimento = int(data_nascimento_quebrada[1])
  ano_nascimento = int(data_nascimento_quebrada[-1])

  data_hoje = date.today()

  idade = data_hoje.year - ano_nascimento

  if data_hoje.month < mes_nascimento or data_hoje.day < dia_nascimento:
    idade -= 1

  return idade

Acredito que dessa maneira, seu código vai ter o comportamento que você deseja.

Espero ter ajudado! Qualquer outra dúvida estou a disposição.

Abraços. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software