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 :
| Niveau | Délai avant révision |
|---|---|
| 0 | 1 jour |
| 1 | 3 jours |
| 2 | 7 jours |
| 3 | 15 jours |
| 4 | 30 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
Les dates dépendent du jour d'exécution : comparer avec date_future(...) plutôt qu'avec une date écrite en dur.
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
- Comment garantissez-vous que le niveau ne dépasse jamais 4 ?
- Pourquoi utiliser
DELAIS[self.niveau]après la mise à jour du niveau, et pas avant ? traiter_reponsene renvoie rien. Comment le reste du programme voit-il le changement ?
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.
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
- Votre fonction modifie-t-elle le paquet reçu ? Pourquoi renvoyer une nouvelle liste ?
- Pourquoi
<=et non<dans la comparaison des dates ?
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
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
- Pourquoi la carte de niveau 2 apparaît-elle dans le résultat du test ? Retracez la boucle carte par carte.
- Quand un nouveau minimum est trouvé, que faut-il faire de la liste déjà construite ?
- Proposez une autre écriture en deux passages : d'abord le minimum, puis le filtrage. Avantages ?
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.