Baccalauréat — Épreuve pratique — 2026 — NSI
Épreuve pratique NSI 2026 — Sujet 04 : croissance de plantes en serre
Sujet
Épreuve pratique de NSI, session 2026 — sujet n°04 de la banque nationale. Durée : 1 heure, sur ordinateur. Le candidat dispose de l'énoncé et de fichiers de code et de données ; il agit en autonomie et, aux « appels professeur » indiqués, présente son travail à l'examinateur ou le sollicite en cas de difficulté.
Croissance de plantes en serre
Une équipe d'agronomes souhaite étudier la croissance de différentes plantes cultivées en serre afin de déterminer l'impact des conditions environnementales sur leur développement. Chaque jour, les chercheurs mesurent la hauteur de chaque plante, la température ambiante et l'humidité de la serre.
L'objectif de ce sujet est de concevoir un programme permettant d'analyser ces données afin de dégager des tendances sur la croissance des plantes.
Deux fichiers Python sont fournis :
plantes.pyqui contient la description des différentes plantes cultivées ;mesures.pyqui contient les relevés journaliers effectués dans la serre.
Le fichier plantes.py présente les plantes étudiées sous la forme de liste d'objets. Chaque plante est représentée par une instance de la classe Plante. Chaque instance de la classe Plante contient les attributs suivants :
- son nom ;
- son espèce ;
- sa durée moyenne de croissance (en jours) ;
- sa taille moyenne (en cm) ;
- son type d'exposition à la lumière parmi
"ombre","mi-ombre"ou"plein soleil".
Le fichier mesures.py contient les données collectées pendant plusieurs jours sous la forme d'une liste de dictionnaires. Chaque dictionnaire correspond à une mesure quotidienne. Chaque mesure comporte les champs suivants :
plante: nom d'une plante figurant dansplantes.py;jour: entier représentant le numéro du jour de culture ;hauteur: flottant correspondant à la hauteur de la plante en centimètres ;temperature: flottant représentant la température moyenne du jour (en °C) ;humidite: flottant représentant le taux d'humidité (en %) mesuré dans la serre.
Question 1. É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 — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Question 2. É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.
Exemple de retour :
{
"plante1": [
{"plante": "plante1", "jour": 1, "hauteur": 100, "temperature": 20, "humidite": 100},
{"plante": "plante1", "jour": 2, "hauteur": 101, "temperature": 20, "humidite": 100},
],
"plante2": [
{"plante": "plante2", "jour": 1, "hauteur": 10, "temperature": 20, "humidite": 20}
]
}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). Cette fonction, fournie dans le fichier culture.py, est censée retirer de la liste toutes les mesures ayant été 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.
Question 3. 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.
Question 4. Proposer une version corrigée de la fonction purger_mesures_extremes répondant parfaitement à l'objectif.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Fichiers fournis
Le dossier fourni au candidat comporte une version PDF de l'énoncé, le fichier culture.py à compléter, un jeu de données de plantes plantes.py et un jeu de données de mesures mesures.py.
culture.py
#############################################################################
# Jeux de données fournis #
#############################################################################
from plantes import Plante, plantes
from mesures import mesures
#############################################################################
# Écrire le code de la fonction croissance_moyenne de la question 1 #
#############################################################################
def croissance_moyenne(plantes):
pass
#############################################################################
# Écrire le code de la fonction dictionnaire_mesure de la question 2 #
#############################################################################
def dictionnaire_mesure(plantes, mesures):
pass
#############################################################################
# Fonction défaillante à analyser et corriger pour les questions 3 et 4 #
#############################################################################
def purger_mesures_extremes(liste_mesures):
"""
Supprime de la liste toutes les mesures dont la température
n'est pas comprise entre 20 et 25°C inclus.
"""
for mesure in liste_mesures:
if mesure['temperature'] < 20 or mesure['temperature'] > 25:
liste_mesures.remove(mesure)
def test_purger():
mesures_test = [
{'jour': 1, 'plante': 'Basilic', 'temperature': 18.0},
{'jour': 2, 'plante': 'Basilic', 'temperature': 19.0},
{'jour': 3, 'plante': 'Basilic', 'temperature': 22.0},
{'jour': 4, 'plante': 'Basilic', 'temperature': 28.0},
{'jour': 5, 'plante': 'Basilic', 'temperature': 29.0}
]
purger_mesures_extremes(mesures_test)
print("Résultat après la purge :")
for m in mesures_test:
print(f"Jour {m['jour']} : {m['temperature']}°C")plantes.py
class Plante:
def __init__(self, nom, espece, croissance, taille, exposition):
self.nom = nom
self.espece = espece
self.croissance = croissance # en jours
self.taille = taille # en cm
self.exposition = exposition # type d'exposition
plantes = [
Plante("Basilic", "Ocimum basilicum", 60, 40, "plein soleil"),
Plante("Tomate", "Solanum lycopersicum", 80, 100, "plein soleil"),
Plante("Menthe", "Mentha spicata", 80, 50, "mi-ombre"),
Plante("Tournesol", "Helianthus annuus", 85, 200, "plein soleil"),
Plante("Fougère", "Dryopteris filix-mas", 90, 80, "ombre")
]mesures.py (début du fichier ; il contient 305 mesures, du jour 1 au jour 85)
mesures = [
{'jour': 1, 'plante': 'Basilic', 'hauteur': 0.85,
'temperature': 29.3, 'humidite': 50.89},
{'jour': 1, 'plante': 'Tomate', 'hauteur': 1.27,
'temperature': 21.51, 'humidite': 47.19},
{'jour': 1, 'plante': 'Menthe', 'hauteur': 0.67,
'temperature': 27.75, 'humidite': 61.14},
{'jour': 1, 'plante': 'Tournesol', 'hauteur': 2.29,
'temperature': 18.42, 'humidite': 49.3},
...
]Corrigé
Créez un compte gratuit : votre première correction est offerte.