Devoir Maison - Calcul des dates¶
Dans cette exercice, nous allons écrire des fonctions pour traiter des dates. Il est interdit d’utiliser la librairie python “datetime” ou tout autre librairie permettant de traiter les dates automatiquement.
Pour simplifier l’exercice, nous considérerons que le calendrier est inchangé depuis son origine. Nous rappelons que les années bisextiles ont lieu tous les 4 ans, sauf tous les 100 ans, sauf tous les 400 ans. Ainsi, 1900, n’était pas bisextile, mais 2000 l’était.
Le calendrier comment le 1er janvier de l’an I (il n’y a pas de zero du mois zero de l’an zero). C’est le premier jour du calendrier.
Afin de vous aider, j’ai indiqué le résultat d’un certain nombre de fonction. Il faudra tester votre code avec mes examples.
J’ai pris ma date de naissance pour une exemple de date, merci d’indiquer la votre en début de fichier (la mienne est le 11 février 1980).
Années bisextiles¶
Écrire une fonction qui prend l’année comme argument et renvoie True ou False suivant que l’année est bisextile ou pas.
print(est_bisextile(2024))
print(est_bisextile(2000))
print(est_bisextile(2021))
print(est_bisextile(1900))
True
True
False
False
Écrire une fonction qui à partir de l’année renvoie le nombre de jour écoulés jusqu’au premier janvier de cette année. Cette fonction renverra donc 0 pour l’an 1, 365 pour l’an 2, \(3\times365\) pour l’an 4, \(4\times365+1\) pour l’an 5. Pour l’an 101, ce sera \(100\times 365 + 24\), etc…
print(nombres_jours_annees_precedentes(1))
print(nombres_jours_annees_precedentes(2))
print(nombres_jours_annees_precedentes(4))
print(nombres_jours_annees_precedentes(101))
print(nombres_jours_annees_precedentes(401))
0
365
1095
36524
146097
Écrire une fonction qui a partir du chiffre du mois (janvier=1, février=2, …) et du jour du mois renvoie le nombre de jour écoulé depuis le premier janvier de cette année. Cette fonction prendra un argument optionnel qui indique si l’année est bisextile.
print(nombre_jours_depuis_premier_janvier(jour=1, mois=1, bisextile=False))
print(nombre_jours_depuis_premier_janvier(jour=31, mois=12, bisextile=False))
print(nombre_jours_depuis_premier_janvier(jour=11, mois=3, bisextile=True))
0
364
70
Si ce n’est pas déjà le cas, écrire la fonction précédente à l’aide d’une liste qui contiendra le nombre de jours successif de chaque mois (31, 28, 31, 30, 31, …)
jours_par_mois_normal = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
jours_par_mois_bisextile = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
Écrire une fonction qui prend comme argument la date sous forme de nombre et renvoie le nombre de jours écoulés depuis le premier janvier de l’an I. Cette fonction utilisera bien entendu les fonctions écrites précédement ! Combien de jour se sont écoulés entre le 1/1/1 et votre date de naissance ?
print(nombre_de_jours(1, 1, 1))
print(nombre_de_jours(annee=1980, mois=2, jour=11))
0
722855
Programmation orientée objet¶
Dans ce qui suit, merci de toujours tester vos fonctions/méthodes avec ma date de naissance (le 11 février 1980) et la vôtre.
Définir un objet
Date
qui s’initialise avec trois arguments (année, jour, mois).Ajouter une méthode
__repr__
qui renvoie la chaîne de caractère permettant de créer l’objet.Ajouter une méthode
__str__
qui renvoie la date sous forme humaine (“14 juillet 1789”). Le nom des mois sera rentré sous forme d’une liste
nom_mois = [
"janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre",
"novembre","décembre"
]
ma_date_de_naissance = Date(1980, 2, 11)
print(ma_date_de_naissance)
ma_date_de_naissance
11 février 1980
Date(annee=1980, mois=2, jour=11)
Ajouter une méthode qui renvoie le nombre de jour écoulés depuis le premier janvier de l’an I.
En utilisant la méthode de la question précédente, définir la méthode spéciale
__sub__
qui renvoie le nombre de jour qui s’est écoulé entre deux dates données.
ma_date_de_naissance = Date(1980, 2, 11)
aujourdhui = Date(2024, 5, 27)
print(ma_date_de_naissance.nombre_de_jours())
age = aujourdhui - ma_date_de_naissance
print(age)
722855
16177
Écrire une méthode qui renvoie le jour de la semaine sous forme d’un nombre (lundi->0, mardi->1, …) et une autre méthode qui renvoie ce jour sous forme d’une chaîne de caractère.
ma_date_de_naissance = Date(1980, 2, 11)
print(ma_date_de_naissance.jour_semaine_nombre())
print(ma_date_de_naissance.jour_semaine_str())
print(ma_date_de_naissance)
0
lundi
lundi 11 février 1980
Manipulation de chaînes de caractères¶
Dans les questions suivantes, il est conseillé d’utiliser la méthode split des chaînes de caractères.
Écrire une fonction qui à partir d’une chaine de caractère du type
"11/02/1890"
renvoie les trois nombres du jours, du mois et de l’année.Écrire une fonction qui créer un objet
Date
à partir d’une telle chaine de caractère.
print(split_date("11/02/1980"))
date_from_str("11/02/1980")
(11, 2, 1980)
Date(annee=1980, mois=2, jour=11)
Mêmes questions, mais avec une date du type “11 février 1980”. La conversion de nom du mois vers le numéro sera faite grâce à un dictionnaire :
{"janvier":1, "février":2, ...}
Créer le dictionnaire précédent à l’aide d’une boucle for à partir de la liste des mois.
print(split_explicit_date("11 février 1980"))
date_from_explicit_str("11 février 1980")
(11, 2, 1980)
Date(annee=1980, mois=2, jour=11)
Statistiques sur les jours de la semaine¶
Le calendrier a une période de 400 ans, soit en tout 4800 mois. Pour chacun de ces mois, calculer le jour de la semaine où tombe le 13. Montrer que le 13 a le plus de chance de tomber un vendredi.
Insee¶
L’insee publie les données sur les personnes décédées régulièrement. Elle se trouvent sur la page suivante : https://www.insee.fr/fr/information/4769950
Téléchargez le fichier correspondant à votre année de naissance. Utiliser la commange pandas.read_csv
pour l’ouvrir (avec l’option delimiter=';'
)
Les dates sont enregistrée sous la forme d’un nombre dont l’écriture décimale correspond à AAAAMMJJ, où AAAA est l’année, MM le mois et JJ le jour.
Calculer l’age en jour de toutes les personnes décés cette année là.
Calculer l’age moyen des décés.
Comment s’appelle la personne la plus agée qui est décédée, quel est son age ?
Tracer l’histogramme de l’age au moment du décés