Baccalauréat — Épreuve pratique — 2026 — NSI
Épreuve pratique NSI 2026 — Sujet 19 : gestion des réservoirs d'eau d'une commune
Sujet
Épreuve pratique de NSI, session 2026 — sujet n°19 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é.
Gestion des réservoirs d'eau
Dans une commune d'une île polynésienne, les services communaux doivent surveiller et gérer les réserves d'eau de plusieurs réservoirs alimentant différents districts. Les apports d'eau dans les réservoirs proviennent uniquement de précipitations ou de captages naturels. La commune dispose d'un système de redistribution de l'eau entre réservoirs par réseaux de canalisations, ou par camions citernes sinon.
L'objectif est d'aider à :
- analyser les volumes d'eau disponibles ;
- prévoir les besoins ;
- proposer un programme de gestion des réservoirs.
Vous êtes chargé(e) de participer à ce développement. Ce suivi permet d'anticiper des risques de sécheresse et de planifier la redistribution en cas de restriction d'eau.
On représente un réservoir d'eau par un dictionnaire avec les champs suivants et le type des valeurs associées :
"nom"(strindiquant le nom du réservoir) ;"capacite"(intindiquant la capacité maximale, en litres, d'eau que le réservoir peut contenir) ;"volume"(intindiquant le volume d'eau en litres actuellement disponible dans le réservoir) ;"district"(strindiquant le lieu desservi par le réservoir).
Plusieurs réservoirs peuvent alimenter un même district. Le fichier donnees.py, dont le contenu est partiellement reproduit ci-dessous, contient les informations sur les réservoirs de la commune.
reservoirs = [
{"nom": "Nuiavai", "capacite": 100000, "volume": 55000, "district": "Tepua"},
{"nom": "Farepape", "capacite": 120000, "volume": 45000, "district": "Fare"},
...
]Question 1. Un réservoir est considéré comme en pénurie si son taux de remplissage est strictement inférieur à 20 %. Écrire en Python une fonction nommée est_en_penurie qui prend en paramètres une liste de réservoirs et le nom d'un réservoir. On supposera que le nom donné correspond à un réservoir présent dans les données. La fonction renverra un booléen indiquant si ce réservoir est en pénurie.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Question 2. Écrire en Python une fonction nommée volume_par_district qui prend en paramètre une liste de réservoirs et qui renvoie un dictionnaire ayant pour clés chaque nom différent de district associé au volume total d'eau, en litres, disponible dans ce district.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Le fichier gestion_eau.py contient les fonctions volume_moyen, liste_districts et reservoirs_par_district.
Question 3. La fonction volume_moyen est censée renvoyer le volume moyen d'eau disponible sur l'ensemble des réservoirs de la commune. Le code de cette fonction est incorrect. Proposer quelques tests simples, sous forme d'assertions, qui permettent de mettre ce ou ces problèmes en évidence :
- vérifier que la liste contient au moins un réservoir ;
- vérifier qu'une moyenne doit être inférieure ou égale à la plus grande valeur de capacité parmi les réservoirs de la liste ;
- vérifier que la fonction renvoie le bon résultat dans un cas simple (par exemple deux réservoirs avec le même volume).
Proposer une version corrigée de la fonction volume_moyen qui valide ces tests et renvoie la valeur correcte.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Question 4. Même si le volume moyen d'eau disponible au niveau de l'ensemble des réservoirs de la commune est satisfaisant, certains districts peuvent présenter un niveau d'eau disponible nettement insuffisant. À l'aide des fonctions précédentes et des fonctions liste_districts et reservoirs_par_district, écrire une fonction districts_vulnerables permettant d'identifier les districts dont le volume moyen est inférieur à 80 % du volume moyen global.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Fichiers fournis
Le dossier comporte une version PDF de l'énoncé, le code source de départ gestion_eau.py et le fichier de données donnees.py.
gestion_eau.py
# ------------------------------------
# gestion_eau.py
# Programme de contrôle des réservoirs
# ------------------------------------
from donnees import reservoirs
# Question 1 : écrire la fonction est_en_penurie
def est_en_penurie(reservoirs, nom_reservoir):
pass
# Question 2 : écrire la fonction volume_par_district
def volume_par_district(reservoirs):
pass
# Question 3
def volume_moyen(reservoirs):
"""
Renvoie le volume moyen d'eau disponible dans les réservoirs.
"""
somme_totale = 0
for r in reservoirs:
somme_totale += r["volume"]
moyenne = somme_totale / (len(reservoirs)-1)
return moyenne
# Question 4
def liste_districts(reservoirs):
"""
Renvoie la liste des districts présents dans les données.
"""
liste = []
for r in reservoirs:
if (r["district"] not in liste):
liste.append(r["district"])
return liste
def reservoirs_par_district(reservoirs):
"""
Renvoie un dictionnaire associant chaque district à la liste
des réservoirs qui s’y trouvent.
"""
liste_rpd = {}
for r in reservoirs:
district = r["district"]
if district not in liste_rpd:
liste_rpd[district] = []
liste_rpd[district].append(r)
return liste_rpd
def districts_vulnerables(reservoirs):
passdonnees.py
reservoirs = [
{"nom": "Nuiavai", "capacite": 100000, "volume": 55000, "district": "Tepua"},
{"nom": "Farepape", "capacite": 120000, "volume": 45000, "district": "Fare"},
{"nom": "Vaipuna", "capacite": 80000, "volume": 60000, "district": "Hiva Oro"},
{"nom": "Vaihere", "capacite": 95000, "volume": 20000, "district": "Fare"},
{"nom": "Teanavai", "capacite": 110000, "volume": 90000, "district": "Avera"},
{"nom": "Matavai", "capacite": 70000, "volume": 25000, "district": "Tepua"},
{"nom": "Anaʻitea", "capacite": 85000, "volume": 30000, "district": "Hiva Oro"},
{"nom": "Faaroa", "capacite": 60000, "volume": 40000, "district": "Avera"},
{"nom": "Vaitiare", "capacite": 105000, "volume": 95000, "district": "Fare"},
{"nom": "Motuavai", "capacite": 90000, "volume": 10000, "district": "Tepua"}
]Corrigé
Créez un compte gratuit : votre première correction est offerte.