Sujet n° 19 · Session 2026 · 1 heure
Les réservoirs d'eau d'une île
Une commune polynésienne surveille ses réservoirs pour anticiper la sécheresse. Le candidat repère les pénuries, totalise l'eau par district, corrige une moyenne fausse d'un seul caractère, puis désigne les districts vulnérables.
- Liste de dictionnaires
- Dictionnaire d'agrégation
- Moyenne
- Assertions
- Composition de fonctions
Mise en situationLes réservoirs
Un réservoir est un dictionnaire : "nom" (str), "capacite" (int, capacité maximale en litres), "volume" (int, volume d'eau disponible en litres) et "district" (str, lieu desservi). Plusieurs réservoirs peuvent alimenter un même district. Le fichier donnees.py contient la liste reservoirs :
| Nom | Capacité (L) | Volume (L) | District |
|---|---|---|---|
| Nuiavai | 100 000 | 55 000 | Tepua |
| Farepape | 120 000 | 45 000 | Fare |
| Vaipuna | 80 000 | 60 000 | Hiva Oro |
| Vaihere | 95 000 | 20 000 | Fare |
| Teanavai | 110 000 | 90 000 | Avera |
| Matavai | 70 000 | 25 000 | Tepua |
| Anaʻitea | 85 000 | 30 000 | Hiva Oro |
| Faaroa | 60 000 | 40 000 | Avera |
| Vaitiare | 105 000 | 95 000 | Fare |
| Motuavai | 90 000 | 10 000 | Tepua |
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.
Question 1Un réservoir en pénurie ?
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
À demander au candidat
- Votre fonction renvoie-t-elle toujours une valeur ? Que se passe-t-il si le nom est absent des données ?
- Pourquoi peut-on écrire directement
return r['volume'] / r['capacite'] < 0.2?
« Strictement inférieur à 20 % » : Vaihere (21 %) n'est pas en pénurie, Motuavai (11 %) l'est.
Résultats attendus
- En pénurie
- Motuavai seulement
Question 2L'eau disponible par district
Écrire en Python une fonction nommée volume_par_district qui prend en paramètres une liste de réservoirs et qui renvoie un dictionnaire ayant pour clés chaque nom différent de district associés au volume total d'eau, en litres, disponible dans ce district.
Appel professeur
À demander au candidat
- Comment votre dictionnaire est-il initialisé pour un district rencontré pour la première fois ?
- Quelle est la différence entre parcourir les clés et les valeurs d'un dictionnaire ?
Créer la clé avant d'ajouter, sinon KeyError au premier réservoir de chaque district.
Résultats attendus
- Tepua, Fare, Hiva Oro, Avera
- 90 000, 160 000, 90 000, 130 000 L
Question 3Une moyenne fausse
Le fichier gestion_eau.py contient aussi les fonctions volume_moyen, liste_districts et reservoirs_par_district. 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
À demander au candidat
- Avec un seul réservoir, que se passe-t-il avec le code fourni ? Quelle erreur obtient-on ?
- Pourquoi le test « deux réservoirs de même volume » est-il si efficace pour révéler l'erreur ?
- Que vérifie l'assertion « la moyenne est inférieure ou égale à la plus grande capacité » ? Pourrait-elle échouer avec le code fourni ?
Diviser par len(reservoirs) - 1 donne 52 222 L au lieu de 47 000 L, et une division par zéro avec un seul réservoir.
Résultats attendus
- Code fourni
- 52 222 L
- Corrigé
- 47 000 L
Question 4Les districts vulnérables
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
À demander au candidat
- Quelles fonctions déjà écrites réutilisez-vous, et pourquoi ne pas tout recalculer ?
- Le seuil de 80 % de la moyenne globale est-il calculé une fois ou à chaque tour de boucle ? Est-ce important ?
On compare le volume moyen par réservoir de chaque district, pas le volume total du district.
Résultats attendus
- Seuil (80 % de 47 000 L)
- 37 600 L
- Moyennes par district
- Tepua 30 000, Fare 53 333, Hiva Oro 45 000, Avera 65 000
- Districts vulnérables
- Tepua
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 gestion_eau.py à ouvrir dans votre éditeur habituel.