web-dev-qa-db-fra.com

Calcul de l'âge en python

Je tente de créer un code dans lequel l'utilisateur est invité à indiquer sa date de naissance et la date du jour afin de déterminer son âge. Ce que j'ai écrit jusqu'à présent c'est:

print("Your date of birth (mm dd yyyy)")
Date_of_birth = input("--->")

print("Today's date: (mm dd yyyy)")
Todays_date = input("--->")


from datetime import date
def calculate_age(born):
    today = date.today()
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day))

age = calculate_age(Date_of_birth)

Cependant, il ne fonctionne pas comme je l'espère. Quelqu'un pourrait-il m'expliquer ce que je fais mal?

3
A. Gunter

Si proche!

Vous devez convertir la chaîne en objet datetime avant de pouvoir effectuer des calculs - voir datetime.datetime.strptime() .

Pour votre date, vous devez faire:

datetime.strptime(input_text, "%d %m %Y")
#!/usr/bin/env python3

from datetime import datetime, date

print("Your date of birth (dd mm yyyy)")
date_of_birth = datetime.strptime(input("--->"), "%d %m %Y")

def calculate_age(born):
    today = date.today()
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day))

age = calculate_age(date_of_birth)

print(age)

PS: je vous encourage à utiliser un ordre de saisie raisonnable - dd mm yyyy ou la norme ISO yyyy mm dd

8
Attie

Cela devrait marcher :)

from datetime import date

def ask_for_date(name):
    data = raw_input('Enter ' + name + ' (yyyy mm dd): ').split(' ')
    try:
        return date(int(data[0]), int(data[1]), int(data[2]))
    except Exception as e:
        print(e)
        print('Invalid input. Follow the given format')
        ask_for_date(name)


def calculate_age():
    born = ask_for_date('your date of birth')
    today = date.today()
    extra_year = 1 if ((today.month, today.day) < (born.month, born.day)) else 0
    return today.year - born.year - extra_year

print(calculate_age())
2
Dani Medina

Vous pouvez également utiliser la bibliothèque date/heure de cette manière. Ceci calcule l’âge en années et supprime l’erreur logique qui renvoie l’âge erroné en raison des propriétés mois et jour.

Comme une personne née le 31 juillet 1999, a 17 ans jusqu'au 30 juillet 2017.

Alors voici le code:

import datetime

#asking the user to input their birthdate
birthDate = input("Enter your birth date (dd/mm/yyyy)\n>>> ")
birthDate = datetime.datetime.strptime(birthDate, "%d/%m/%Y").date()
print("Your birthday is on "+ birthDate.strftime("%d") + " of " + birthDate.strftime("%B, %Y"))

currentDate = datetime.datetime.today().date()

#some calculations here 
age = currentDate.year - birthDate.year
monthVeri = currentDate.month - birthDate.month
dateVeri = currentDate.day - birthDate.day

#Type conversion here
age = int(age)
monthVeri = int(monthVeri)
dateVeri = int(dateVeri)

# some decisions
if monthVeri < 0 :
    age = age-1
Elif dateVeri < 0 and monthVeri == 0:
    age = age-1


#lets print the age now
print("Your age is {0:d}".format(age))
0
Yogesh Manghnani