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 %).
| Plante | Croissance | Exposition |
|---|---|---|
| Basilic | 60 jours | plein soleil |
| Tomate | 80 jours | plein soleil |
| Menthe | 80 jours | mi-ombre |
| Tournesol | 85 jours | plein soleil |
| Fougère | 90 jours | ombre |
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
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.
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
- Comment accède-t-on à la durée de croissance d'une plante ? Quelle différence avec un dictionnaire ?
- Pourquoi tester la liste vide avant toute division ?
Tester la liste vide avant la division, et renvoyer None (pas 0).
Résultats attendus
- Les cinq plantes
- 79 jours
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
- Pourquoi créer une clé pour chaque plante avant de parcourir les mesures ?
- Que fait votre fonction d'une mesure dont la plante n'est pas dans la liste ?
- Combien de fois parcourez-vous les mesures ? Et avec une boucle imbriquée sur les plantes ?
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
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
- Retracez la boucle sur
mesures_test: quand on supprime la mesure du jour 1, quelle mesure la boucle examine-t-elle ensuite ? - Pourquoi la fonction ne renvoie-t-elle rien ? Comment l'appelant voit-il le résultat ?
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_purgeravec le code fourni- jours 2, 3 et 5 restent
- Mesures du fichier, code fourni
- 187 restent, dont 73 hors de 20 à 25 °C
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
- Votre correction modifie-t-elle la liste reçue ou en crée-t-elle une nouvelle ? Est-ce ce que demande l'énoncé ?
- Quelles autres corrections sont possibles (parcours d'une copie, parcours à l'envers, boucle
while) ?
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.