Syntaxe erreur

Signaler
-
 trifou -
Bonjour,
Je ne trouve pas mon erreur!
def ask_for_date(name):
 data = raw_input('Enter' + name +'(yyyy mm dd):').split('')
 try:
  return data(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) < (bien.month, born.day))
 else 0
 return today.year - bien.year - extra_year
 
print(calculate_age())




Configuration: Android / Chrome 79.0.3945.93


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

Bonjour,

Quand on a une erreur, ben on donne cette erreur que python lance.
Bon, là, pas difficile de voir où elle est.
Il n'est pas possible de comparer 2 tuples, et puis ce n'est pas comme ça qu'on doit faire ce test.

On doit soustraire un an si le mois courant est inférieur, ou si le mois courant est le même et le jour courant inférieur.
De plus, tu dois vérifier que la date fournie est valide dans ta fonction ask_for_date, on peut faire ça simplement avec une regex, puis aussi vérifier que l'année est située dans un intervalle, puis passer la date à datetime.date, qui pourra nous envoyer bouler si par exemple on met un 29 février d'une année non bissextile.

import datetime
import re

def ask_for_date(name, delta_min=0, delta_max=0):
    message = 'Enter {} (yyyy/mm/dd) : '.format(name)
    while True:
        data = input(message)
        # data = raw_input(message) # python2 est mort vive python3 !
        m = re.match('^(\d{4})/(\d{1,2})/(\d{1,2})$', data)
        if m:
            year, month, day = map(int, m.groups())
            current_year = datetime.date.today().year
            if current_year - delta_min >= year >= current_year - delta_max:
                try:
                    date = datetime.date(year, month, day)
                except ValueError:
                    pass
                else:
                    return date
        print('Invalid date !')
                    
            
def calculate_age():
    born_date = ask_for_date('your date of birth', 16, 120)
    current_date = datetime.date.today()
    years = today.year - born_date.year
    if (
        current_date.month < born_date.month or
        current_date.month == born_date.month and current_date.day < born_date.day
    ):
        years -= 1
    return years

print(calculate_age())