Exercice 1 Asie – Bac NSI 2025 – Jour 2
Accès et modification des données sur l'année de l'instance courante, entre deux dates.
mots clés: POO, algorithmique
🔎 Voir les exercices similaires ↓
Asie – Bac NSI 2025 – Jour 2 Énoncé de l'exercice 1
Cet exercice porte sur la programmation orientée objet et l’algorithmique.
Pour travailler sur des dates, on a créé la classe Date dont le code est écrit ci-dessous :
class Date:
def __init__(self, jour, mois, annee):
self.jour = ... # ligne 3
self.mois = ... # ligne 4
self.annee = ... # ligne 5
self.nb_jours_par_mois = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# lignes 7 et 8 : à compléter (question 6)
def get_jour(self):
return self.jour
def get_mois(self):
return self.mois
def get_annee(self): # ligne 15
return ... # ligne 16
def set_jour(self, jour):
self.jour = jour
def set_mois(self, mois): # ligne 21
self.mois = ... # ligne 22
def set_annee(self, annee):
self.annee = annee
def est_bissextile(self):
...
Partie A : Accès et modification des données
Le constructeur de la classe Date prend en paramètres trois entiers représentant le jour, le mois et l’année, puis les affecte respectivement aux attributs jour, mois et annee.
Recopier et compléter les lignes 3 à 5 du code précédent.
Indiquer à quelle date correspond l’instance de la classe Date suivante : d = Date(1, 5, 2000)
Écrire le code permettant de créer une instance d de la classe Date qui représente la date du 19 juin 2024.
La méthode get_annee renvoie la valeur de l’attribut annee.
Recopier et compléter les lignes 15 et 16 du code précédent.
La méthode set_mois modifie l’attribut mois en lui affectant la valeur passée en argument.
Recopier et compléter les lignes 21 et 22 du code précédent.
L’attribut nb_jours_par_mois contient une liste qui correspond au nombre de jours pour chaque mois. Le mois de février contient généralement 28 jours mais lors des années bissextiles il en contient 29.
La classe Date dispose d’une méthode est_bissextile, qui utilise uniquement l’attribut annee, et qui renvoie True si l’année de l’instance courante est bissextile et False sinon. On veut compléter la méthode __init__ pour ajuster le nombre de jours par mois pour les années bissextiles.
Recopier et compléter les lignes 7 et 8 suivantes :
self.nb_jours_par_mois = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # ligne 6
if ... : # ligne 7
self.nb_jours_par_mois[...] = 29 # ligne 8
Partie B : sur l’année de l’instance courante
Pour déterminer le nombre de jours au cours d’une année, il faut savoir si elle est bissextile.
Une année est bissextile si elle est divisible par 4 mais pas par 100 ou si elle est divisible par 400.
Écrire le code de la méthode est_bissextile.
On rappelle qu’un entier a est divisible par l’entier n si a % n == 0.
On dote la classe Date de la méthode nb_jours_passes qui renvoie le nombre de jours passés dans l’année de l’instance courante.
def nb_jours_passes(self):
nb_jours = self.jour
mois = self.mois - 2
while mois >= 0:
nb_jours = nb_jours + self.nb_jours_par_mois[mois]
mois = mois - 1
return nb_jours
Indiquer quel sera l’affichage en console après l’exécution des deux instructions suivantes :
>>> d1 = Date(20, 3, 2001)
>>> d1.nb_jours_passes()
On dote la classe Date de la méthode nb_jours_restants qui renvoie le nombre de jours restants dans l’année de l’instance courante, soit 366 ou 365 moins le nombre de jours déjà passés, selon que l’année est bissextile ou non.
Recopier et compléter le script de la méthode nb_jours_restants ci-après :
def nb_jours_restants(self):
j = 365
if ...:
j = 366
return j - ...
Partie C : entre deux dates
On dote la classe Date de la méthode nb_jours_depuis qui prend en paramètre une autre instance other de la classe Date et qui renvoie le nombre de jours écoulés entre la date de l’instance other et la date de l’instance courante.
def nb_jours_depuis(self, other):
if other.get_annee() > self.get_annee():
return -1
if other.get_annee() == self.get_annee():
if other.nb_jours_passes() > self.nb_jours_passes() :
return -1
if other.nb_jours_passes() == self.nb_jours_passes() :
return 0
nb_jours = self.nb_jours_passes() + other.nb_jours_restants()
for annee in range(other.get_annee()+1, self.get_annee()):
d_suivant = date(1, 1, annee)
if d_suivant.est_bissextile():
nb_jours += 366
else:
nb_jours += 365
return nb_jours
On crée les instances de la classe Date suivantes :
>>> d1 = Date(15, 6, 2024)
>>> d2 = Date(15, 6, 2024)
>>> d3 = Date(15, 7, 2024)
>>> d4 = Date(15, 6, 2025)
>>> d5 = Date(15, 6, 2022)
Indiquer quels seront alors les affichages en console après l’exécution de chacune des instructions suivantes (on précise que l’année 2024 est bissextile) :
>>> d1.nb_jours_depuis(d2) >>> d1.nb_jours_depuis(d3) >>> d1.nb_jours_depuis(d4) >>> d1.nb_jours_depuis(d5)
Le timestamp est le nombre de secondes qui se sont écoulées depuis le 1er janvier 1970 à 00h00. Il s’agit de la date de la mise en marche du système d’exploitation UNIX.
Par exemple, le 01/01/2024 à 00:00:00 correspond au timestamp de 1704063600.
Recopier et compléter le code de la méthode timestamp qui renvoie le nombre de secondes qui se sont écoulées depuis le 1er janvier 1970.
def timestamp(self):
d = ...
return self.nb_jours_depuis(d) * 24 * 3600
Asie – Bac NSI 2025 – Jour 2 Correction de l'exercice 1
Partie A – Accès et modification des données
1. Compléter le constructeur __init__ (lignes 3 à 5)
Réponse :
self.jour = jour
self.mois = mois
self.annee = annee
2. Date correspondant à d = Date(1, 5, 2000)
d représente le 1er mai 2000.
3. Créer une instance représentant le 19 juin 2024
d = Date(19, 6, 2024)
4. Méthode get_annee (lignes 15 et 16)
def get_annee(self):
return self.annee
5. Méthode set_mois (lignes 21 et 22)
def set_mois(self, mois):
self.mois = mois
6. Ajustement du mois de février pour les années bissextiles
Code donné :
self.nb_jours_par_mois = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
Réponse (lignes 7 et 8) :
if self.est_bissextile():
self.nb_jours_par_mois[1] = 29
Partie B – Sur l’année de l’instance courante
7. Méthode est_bissextile
def est_bissextile(self):
if (self.annee % 400 == 0) or (self.annee % 4 == 0 and self.annee % 100 != 0):
return True
else:
return False
8. Affichage de d1.nb_jours_passes()
d1 = Date(20, 3, 2001)
d1.nb_jours_passes()
Calcul :
Janvier : 31 jours
Février 2001 : 28 jours (année non bissextile)
Mars : 20 jours
Total : 31 + 28 + 20 = 79
Réponse :
79
9. Méthode nb_jours_restants
def nb_jours_restants(self):
j = 365
if self.est_bissextile():
j = 366
return j - self.nb_jours_passes()
Partie C – Entre deux dates
10. Résultats de nb_jours_depuis
Dates :
d1 = Date(15, 6, 2024)
d2 = Date(15, 6, 2024)
d3 = Date(15, 7, 2024)
d4 = Date(15, 6, 2025)
d5 = Date(15, 6, 2022)
⚠️ On précise : 2024 est bissextile
a) d1.nb_jours_depuis(d2)
Réponse :
0
b) d1.nb_jours_depuis(d3)
Les deux dates sont en 2024 et d3 a plus de jours passés que d1 (197 > 167) : le test other.nb_jours_passes() > self.nb_jours_passes() est vrai, la méthode renvoie -1.
Réponse :
-1
c) d1.nb_jours_depuis(d4)
other.get_annee() vaut 2025, qui est strictement supérieur à self.get_annee() = 2024 : la méthode renvoie -1 dès le premier test.
Réponse :
-1
d) d1.nb_jours_depuis(d5)
Les années sont différentes et d5 est antérieure : on exécute la fin de la méthode.
self.nb_jours_passes() = 31 + 29 + 31 + 30 + 31 + 15 = 167 (2024 est bissextile)
other.nb_jours_restants() = 365 − 166 = 199 (2022 n’est pas bissextile)
la boucle ajoute les années strictement comprises entre 2022 et 2024 : 2023 → 365
Total : 167 + 199 + 365 = 731
Réponse :
731
11. Méthode timestamp
def timestamp(self):
d = Date(1, 1, 1970)
return self.nb_jours_depuis(d) * 24 * 3600
Une erreur, un oubli ? Écrivez-moi : frederic.peuriere@lfcl.pt
🔎 Exercices sur des thèmes similaires
-
Métropole 2023 – jour 1 – exercice 3
POO, algorithmique — Difficulté : 🔥🔥🔥🔥🔥 -
Polynésie 2023 – jour 1 – exercice 3
algorithmique, POO, méthode diviser-pour-régner — Difficulté : 🔥🔥🔥🔥🔥 -
Asie 2024 – jour 1 – exercice 1
programmation, POO, algorithmique — Difficulté : 🔥🔥🔥🔥🔥 -
Polynésie 2025 – jour 2 – exercice 1
POO, algorithmique , programmation — Difficulté : 🔥🔥🔥🔥🔥 -
Polynésie 2025 – jour 1 – exercice 1
réseaux, algorithmique, POO — Difficulté : 🔥🔥🔥🔥🔥 -
Amérique du Nord 2025 – jour 2 – exercice 2
bugs, algorithmique, POO — Difficulté : 🔥🔥🔥🔥🔥