En spécialité NSI, apprendre à programmer ne consiste pas seulement à écrire quelques lignes de Python.
Il faut surtout apprendre à analyser un problème, le décomposer, tester ses solutions et corriger ce qui ne fonctionne pas.
C’est précisément l’objectif de ce projet proposé aux élèves : concevoir progressivement une application capable de travailler sur les différentes étapes d’un cycle menstruel et de produire des dates exploitables dans un calendrier numérique. Le sujet prend comme modèle simplifié un cycle régulier de 28 jours et distingue les règles, la phase folliculaire, l’ovulation et la phase lutéale.
Quand la programmation rencontre une situation concrète
Le point de départ est très éloigné des exercices abstraits que l’on associe parfois à l’informatique.
Les élèves doivent manipuler des dates, raisonner sur le calendrier, utiliser des conditions, construire des fonctions puis produire des données dans un format utilisé par de véritables applications.
Une date est notamment représentée en Python sous la forme d’un tuple :
(jour, mois, annee)
Par exemple, le 7 septembre 2025 peut être représenté par (7, 9, 2025).
À partir de cette représentation très simple, plusieurs problèmes informatiques apparaissent.
Comment reconnaître une année bissextile ? Comment ajouter plusieurs jours à une date ? Comment déterminer automatiquement la phase correspondant à un jour du cycle ? Comment vérifier qu’un programme fonctionne dans différentes situations ?
Autant de questions qui obligent les élèves à transformer un problème réel en algorithmes.
Première étape : traduire une règle en algorithme
Les élèves commencent par travailler sur les années bissextiles.
La règle paraît simple, mais sa traduction informatique demande déjà de la rigueur : une année est bissextile si elle est divisible par 4, sauf lorsqu’elle est divisible par 100, à moins qu’elle ne soit également divisible par 400.
Il faut donc passer d’une règle exprimée en français à une combinaison de conditions logiques compréhensible par l’ordinateur.
C’est l’un des apprentissages fondamentaux de la NSI : transformer une situation en algorithme.
Découper un problème complexe en petites fonctions
Une autre partie du travail consiste à déterminer automatiquement la phase du cycle à partir d’un numéro de jour compris entre 1 et 28.
Dans le modèle proposé par le sujet :
- les jours 1 à 5 correspondent aux règles ;
- les jours 6 à 13 à la phase folliculaire ;
- le jour 14 à l’ovulation ;
- les jours 15 à 28 à la phase lutéale.
Les élèves doivent écrire une fonction capable de traduire ces intervalles en résultat informatique, tout en utilisant une assertion pour contrôler les données reçues.
Cette manière de travailler est essentielle en programmation : plutôt que de construire immédiatement un programme gigantesque, on décompose le problème en petites fonctions spécialisées.
C’est cette même logique que l’on retrouve ensuite dans des projets beaucoup plus importants.
Tester son programme : une compétence aussi importante que coder
Écrire une fonction n’est pas suffisant.
Encore faut-il vérifier qu’elle fonctionne.
Une fonction permettant d’ajouter un nombre de jours à une date est fournie aux élèves. Elle doit notamment être capable de gérer les changements de mois et les passages à l’année suivante.
Les élèves doivent ensuite imaginer plusieurs tests pertinents pour vérifier son comportement. Le sujet demande explicitement d’ajouter au moins trois cas supplémentaires et surtout de justifier le choix de chaque test.
C’est une étape particulièrement intéressante.
Un bon programmeur ne se demande pas seulement :
« Est-ce que mon programme fonctionne ? »
Il se demande aussi :
« Dans quelles situations pourrait-il ne pas fonctionner ? »
Passage du mois de janvier à février, année bissextile, changement d’année… Les cas limites deviennent alors de véritables outils pour vérifier la qualité d’un programme.
Produire un calendrier compatible avec d’autres logiciels
La dernière partie du projet permet aux élèves de découvrir un autre aspect important de l’informatique : les formats de données standardisés.
L’objectif est de produire un calendrier au format iCalendar, un format permettant de décrire des événements destinés à être utilisés par des logiciels d’agenda.
Un événement contient notamment une date sous la forme AAAAMMJJ. Ainsi, le 3 juillet 2026 doit devenir 20260703.
Le programme fourni génère déjà les dates successives à partir d’un cycle régulier de 28 jours, mais une erreur empêche le calendrier produit d’être valide. Les élèves doivent observer le problème, identifier son origine puis proposer une correction.
Ils passent ainsi d’un exercice de programmation à une véritable démarche de débogage.
Comprendre pourquoi un programme ne fonctionne pas
Cette dernière étape est probablement l’une des plus proches de la réalité du développement informatique.
Le code existe.
Il semble presque fonctionner.
Mais le résultat obtenu n’est pas conforme au format attendu.
Dans le programme de départ, les informations nécessaires à la création du calendrier sont construites progressivement sous forme de chaînes de caractères avant d’être assemblées dans un fichier iCalendar.
Les élèves doivent donc analyser un code qu’ils n’ont pas entièrement écrit eux-mêmes.
C’est une compétence importante : dans les études supérieures comme dans le monde professionnel, on ne travaille pas uniquement sur son propre programme. Il faut aussi être capable de lire, comprendre, tester et modifier le code écrit par quelqu’un d’autre.
Une démarche proche du travail des développeurs
Ce projet permet de retrouver plusieurs étapes caractéristiques d’un véritable travail de développement :
analyser → décomposer → programmer → tester → identifier les erreurs → corriger → vérifier à nouveau.
Cette démarche correspond à celle que nous cherchons à installer progressivement dans les projets menés en NSI : découper un problème en modules, définir précisément le rôle des fonctions puis assembler et tester les différentes briques du programme.
Les élèves découvrent ainsi qu’un projet informatique n’est pas simplement une succession d’instructions Python.
C’est avant tout une méthode de résolution de problèmes.
Des compétences qui dépassent largement Python
À travers ce sujet, les élèves mobilisent simultanément plusieurs compétences :
- comprendre un problème exprimé en langage naturel ;
- construire un algorithme ;
- utiliser des conditions et des fonctions ;
- manipuler des données ;
- concevoir des tests pertinents ;
- rechercher l’origine d’une erreur ;
- comprendre un format informatique standardisé ;
- lire et modifier un programme existant.
Ce sont précisément ces compétences qui rendent la spécialité NSI intéressante : on y apprend à construire des solutions, pas simplement à utiliser des outils numériques.
Et si le meilleur moyen de comprendre l’informatique était de construire ?
C’est tout l’intérêt de ces projets.
Les élèves commencent avec une situation concrète. Ils la transforment progressivement en petits problèmes. Puis chaque problème devient une fonction, chaque fonction peut être testée et l’ensemble finit par former une application.
Et derrière quelques dizaines de lignes de Python apparaissent progressivement les méthodes utilisées dans des projets informatiques beaucoup plus ambitieux.
C’est aussi cela, la spécialité Numérique et Sciences Informatiques au lycée Lamarck d’Albert : apprendre à comprendre un problème, imaginer une solution et la construire avec du code.
Laisser un commentaire