Épreuve pratique NSI

Sujet n° 4 · Session 2026 · 1 heure

La croissance des plantes en serre

Des agronomes relèvent chaque jour la hauteur des plantes, la température et l'humidité de la serre. Le candidat calcule des moyennes, regroupe les mesures par plante, puis comprend pourquoi supprimer pendant un parcours laisse passer des valeurs.

  • Programmation objet
  • Dictionnaire de listes
  • Tests
  • Modification d'une liste parcourue
  • Cas limites

Mise en situationLes données

Le fichier plantes.py décrit les plantes étudiées : une liste plantes d'instances de la classe Plante, qui ont pour attributs nom, espece, croissance (durée moyenne de croissance, en jours), taille (taille moyenne, en cm) et exposition ("ombre", "mi-ombre" ou "plein soleil").

Le fichier mesures.py contient la liste mesures des relevés quotidiens : chaque mesure est un dictionnaire avec les clés 'plante' (nom d'une plante), 'jour' (numéro du jour de culture), 'hauteur' (en cm), 'temperature' (en °C) et 'humidite' (en %).

PlanteCroissanceExposition
Basilic60 joursplein soleil
Tomate80 joursplein soleil
Menthe80 joursmi-ombre
Tournesol85 joursplein soleil
Fougère90 joursombre

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

La fougère n'a aucune mesure dans mesures.py : c'est le cas « liste vide » de la question 2 dans les données réelles.

1

Question 1Durée moyenne de croissance

Écrire une fonction croissance_moyenne(plantes) qui prend en paramètre une liste d'instances de la classe Plante et renvoie la moyenne des durées de croissance de l'ensemble de ces plantes (en jours). Si la liste fournie est vide, la fonction doit renvoyer None.

Écrire au moins deux tests pour valider le bon fonctionnement de cette fonction, dont un traitant le cas d'une liste vide.

Appel professeur

À demander au candidat

  1. Comment accède-t-on à la durée de croissance d'une plante ? Quelle différence avec un dictionnaire ?
  2. Pourquoi tester la liste vide avant toute division ?
Point de vigilance

Tester la liste vide avant la division, et renvoyer None (pas 0).

Résultats attendus
Les cinq plantes
79 jours
2

Question 2Les mesures de chaque plante

Écrire une fonction dictionnaire_mesure(plantes, mesures) qui prend en paramètre la liste des plantes et la liste des mesures. Elle doit renvoyer un dictionnaire où chaque clé est le nom d'une plante (présente dans la liste plantes), et chaque valeur associée est la liste des mesures concernant cette plante spécifique. Si une plante de la liste ne possède aucune mesure associée, la liste correspondante dans le dictionnaire devra être vide.

Concevoir une série de tests pertinente pour vérifier le bon comportement de cette fonction.

Appel professeur

À demander au candidat

  1. Pourquoi créer une clé pour chaque plante avant de parcourir les mesures ?
  2. Que fait votre fonction d'une mesure dont la plante n'est pas dans la liste ?
  3. Combien de fois parcourez-vous les mesures ? Et avec une boucle imbriquée sur les plantes ?
Point de vigilance

Initialiser chaque plante avec une liste vide garantit la clé même sans mesure (la fougère).

Résultats attendus
Nombre de mesures par plante
Basilic 60, Tomate 80, Menthe 80, Tournesol 85, Fougère 0
3

Question 3Une purge incomplète

Afin de ne conserver que les données correspondant à des conditions climatiques idéales, un chercheur a rédigé la fonction purger_mesures_extremes(liste_mesures). Elle est censée retirer de la liste toutes les mesures prises à une température strictement inférieure à 20 °C ou strictement supérieure à 25 °C. Cependant, lorsqu'on exécute cette fonction sur les données, on constate qu'un certain nombre de relevés pris à des températures extrêmes sont toujours présents dans la liste finale.

Exécuter le test de la fonction test_purger et analyser le code de la fonction purger_mesures_extremes pour identifier la source de cette erreur logique.

Appel professeur

À demander au candidat

  1. Retracez la boucle sur mesures_test : quand on supprime la mesure du jour 1, quelle mesure la boucle examine-t-elle ensuite ?
  2. Pourquoi la fonction ne renvoie-t-elle rien ? Comment l'appelant voit-il le résultat ?
Point de vigilance

Retirer un élément pendant le parcours décale les suivants : l'élément qui prend sa place n'est jamais examiné.

Résultats attendus
test_purger avec le code fourni
jours 2, 3 et 5 restent
Mesures du fichier, code fourni
187 restent, dont 73 hors de 20 à 25 °C
4

Question 4Corriger la purge

Proposer une version corrigée de la fonction purger_mesures_extremes répondant parfaitement à l'objectif. Elle se trouve à la question 3.

Appel professeur

À demander au candidat

  1. Votre correction modifie-t-elle la liste reçue ou en crée-t-elle une nouvelle ? Est-ce ce que demande l'énoncé ?
  2. Quelles autres corrections sont possibles (parcours d'une copie, parcours à l'envers, boucle while) ?
Point de vigilance

La fonction doit modifier la liste reçue : liste_mesures = [...] ne change que la variable locale.

Résultats attendus
Mesures du fichier, corrigé
114 restent

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 culture.py à ouvrir dans votre éditeur habituel.

Chargement de Python…