# -*- coding: utf-8 -*- """ Corrigé Math93 - Bac NSI 2026 - Épreuve pratique - Sujet 04 Thème : croissance des plantes Compétences : listes, dictionnaires, POO, parcours, tests, suppression dans une liste. Fichiers nécessaires dans le même dossier : plantes.py, mesures.py """ from plantes import Plante, plantes from mesures import mesures # ----------------------------------------------------------------------------- # Question 1 # ----------------------------------------------------------------------------- def croissance_moyenne(plantes: list[Plante]) -> float | None: """Renvoie la durée moyenne de croissance des plantes, ou None si la liste est vide.""" if len(plantes) == 0: return None total = 0 for plante in plantes: total = total + plante.croissance return total / len(plantes) # ----------------------------------------------------------------------------- # Question 2 # ----------------------------------------------------------------------------- def dictionnaire_mesure(plantes: list[Plante], mesures: list[dict]) -> dict[str, list[dict]]: """Regroupe les mesures dans un dictionnaire indexé par le nom de la plante.""" mesures_par_plante = {} for plante in plantes: mesures_par_plante[plante.nom] = [] for mesure in mesures: nom_plante = mesure["plante"] if nom_plante in mesures_par_plante: mesures_par_plante[nom_plante].append(mesure) return mesures_par_plante # ----------------------------------------------------------------------------- # Question 3 / Question 4 # ----------------------------------------------------------------------------- def purger_mesures_extremes(liste_mesures: list[dict]) -> None: """Supprime en place les mesures dont la température n'est pas entre 20 et 25 inclus.""" indice = 0 while indice < len(liste_mesures): temperature = liste_mesures[indice]["temperature"] if temperature < 20 or temperature > 25: # On ne change pas d'indice après pop : l'élément suivant prend la place courante. liste_mesures.pop(indice) else: indice = indice + 1 # ----------------------------------------------------------------------------- # Tests rapides # ----------------------------------------------------------------------------- def tests() -> None: """Exécute quelques tests de validation du corrigé.""" assert croissance_moyenne([]) is None assert croissance_moyenne([Plante("A", "espèce A", 10, 20, "ombre")]) == 10 assert croissance_moyenne(plantes) == 79 plantes_test = [ Plante("A", "espèce A", 10, 20, "ombre"), Plante("B", "espèce B", 20, 30, "plein soleil"), Plante("C", "espèce C", 30, 40, "mi-ombre"), ] mesures_test = [ {"plante": "A", "jour": 1, "hauteur": 10, "temperature": 21, "humidite": 60}, {"plante": "A", "jour": 2, "hauteur": 12, "temperature": 22, "humidite": 61}, {"plante": "B", "jour": 1, "hauteur": 15, "temperature": 23, "humidite": 62}, {"plante": "X", "jour": 1, "hauteur": 99, "temperature": 24, "humidite": 63}, ] resultat = dictionnaire_mesure(plantes_test, mesures_test) assert list(resultat.keys()) == ["A", "B", "C"] assert len(resultat["A"]) == 2 assert len(resultat["B"]) == 1 assert resultat["C"] == [] mesures_a_purger = [ {"jour": 1, "plante": "Basilic", "temperature": 18.0}, {"jour": 2, "plante": "Basilic", "temperature": 20.0}, {"jour": 3, "plante": "Basilic", "temperature": 22.0}, {"jour": 4, "plante": "Basilic", "temperature": 25.0}, {"jour": 5, "plante": "Basilic", "temperature": 29.0}, ] purger_mesures_extremes(mesures_a_purger) assert mesures_a_purger == [ {"jour": 2, "plante": "Basilic", "temperature": 20.0}, {"jour": 3, "plante": "Basilic", "temperature": 22.0}, {"jour": 4, "plante": "Basilic", "temperature": 25.0}, ] if __name__ == "__main__": tests() print("Tests OK - corrigé du sujet 04 valide.")