Épreuve pratique NSI

Sujet n° 21 · Session 2026 · 1 heure

Réviser avec les boîtes de Leitner

Des cartes de révision dont le délai s'allonge à chaque bonne réponse : la répétition espacée de Leitner. Le candidat écrit une méthode, filtre les cartes du jour, puis corrige une recherche de minimum qui garde trop de cartes.

  • Programmation objet
  • Méthodes
  • Dates
  • Filtrage de liste
  • Recherche de minimum

Mise en situationLa méthode de Leitner

Chaque carte possède un niveau d'avancement de 0 à 4. Lorsque l'utilisateur révise une carte, s'il répond correctement, la carte passe au niveau supérieur (sans dépasser le niveau 4). S'il se trompe, elle retombe immédiatement au niveau 0. La prochaine date de révision est la date du jour plus le délai du nouveau niveau :

NiveauDélai avant révision
01 jour
13 jours
27 jours
315 jours
430 jours

La liste DELAIS = [1, 3, 7, 15, 30] donne ces délais par niveau.

Toutes les cellules de cette page partagent le même Python, comme un notebook : une fonction écrite à une question sert aux suivantes. Maj + Entrée exécute la cellule.

Pour l'examinateur

Repère

Les dates dépendent du jour d'exécution : comparer avec date_future(...) plutôt qu'avec une date écrite en dur.

1

Question 1Traiter une réponse

On modélise ce fonctionnement à l'aide de la programmation orientée objet. Dans le fichier cartes.py, la classe Carte a été commencée.

Écrire la méthode traiter_reponse(self, succes) qui prend en paramètre un booléen succes (True si l'utilisateur a bien répondu, False sinon). Cette méthode doit mettre à jour l'attribut self.niveau de la carte selon les règles de Leitner énoncées, puis calculer et mettre à jour l'attribut self.date_prochaine en utilisant la liste globale DELAIS. Pour ajouter des jours à la date d'aujourd'hui, on utilisera la fonction fournie date_future(nb_jours).

Appel professeur

À demander au candidat

  1. Comment garantissez-vous que le niveau ne dépasse jamais 4 ?
  2. Pourquoi utiliser DELAIS[self.niveau] après la mise à jour du niveau, et pas avant ?
  3. traiter_reponse ne renvoie rien. Comment le reste du programme voit-il le changement ?
Point de vigilance

La date se calcule avec le nouveau niveau, une fois celui-ci mis à jour.

Un échec remet le niveau à 0, quel que soit le niveau précédent.

2

Question 2Les cartes du jour

On considère que la base de révision, le paquet de cartes, est une liste d'instances de la classe Carte.

Écrire une fonction extraire_cartes_du_jour(paquet, date_jour) qui prend en paramètres une liste de cartes paquet et une date de référence date_jour et qui renvoie une nouvelle liste contenant uniquement les cartes dont la date_prochaine est inférieure ou égale à date_jour. On admet qu'on peut comparer des dates avec les opérateurs usuels <, <=, ==, >= et >.

Appel professeur

À demander au candidat

  1. Votre fonction modifie-t-elle le paquet reçu ? Pourquoi renvoyer une nouvelle liste ?
  2. Pourquoi <= et non < dans la comparaison des dates ?
Point de vigilance

Une carte due aujourd'hui doit être révisée : la comparaison est large.

Résultats attendus
Paquet, dans 4 jours
c1 (Italie) et c2 (7 × 8)
Paquet, aujourd'hui
aucune carte
3

Question 3Les cartes à renforcer

Afin d'aider l'étudiant à cibler ses lacunes, on souhaite extraire du paquet les cartes qui lui posent le plus de problèmes, c'est-à-dire celles dont le niveau est le plus bas parmi toutes les cartes du paquet. La fonction extraire_cartes_a_renforcer(paquet) a été rédigée dans ce but. Cependant, elle contient une faille logique.

Exécuter la fonction test_renforcement() fournie. Observer le résultat affiché dans la console et constater l'incohérence. Analyser le code de la fonction extraire_cartes_a_renforcer(paquet), identifier la source de cette erreur logique, puis corriger le code afin qu'il ne renvoie que les cartes possédant rigoureusement le niveau minimum.

Appel professeur

À demander au candidat

  1. Pourquoi la carte de niveau 2 apparaît-elle dans le résultat du test ? Retracez la boucle carte par carte.
  2. Quand un nouveau minimum est trouvé, que faut-il faire de la liste déjà construite ?
  3. Proposez une autre écriture en deux passages : d'abord le minimum, puis le filtrage. Avantages ?
Point de vigilance

La liste n'est pas vidée quand le minimum baisse : il faut repartir de [carte].

Résultats attendus
Code fourni
Italie (niveau 2) et 7 × 8 (niveau 1)
Corrigé
7 × 8 (niveau 1) seulement

Le fichier du candidat

Le jour de l'épreuve, le candidat travaille dans un seul fichier. Ce bouton rassemble vos cellules dans l'ordre, telles qu'elles sont à l'écran, en un cartes.py à ouvrir dans votre éditeur habituel.

Chargement de Python…