Épreuve pratique NSI

Sujet n° 5 · Session 2026 · 1 heure

L'empreinte carbone d'Ada

Les résultats d'un simulateur d'empreinte carbone sont rangés dans des dictionnaires imbriqués. Le candidat additionne une version à plat, passe à la récursivité, puis répare une alerte qui s'arrête à la première sous-catégorie.

  • Dictionnaires imbriqués
  • Récursivité
  • Fichier JSON
  • Débogage
  • Jeu de tests

Mise en situationLes résultats d'Ada

L'empreinte carbone est la production de CO2 imputable à une personne pendant une année, en kilogrammes. Une utilisatrice, Ada, a obtenu une estimation de la sienne avec un simulateur en ligne. Les résultats sont fournis au format JSON dans deux fichiers.

empreinte_ada_agr.json est la version agrégée : un simple dictionnaire qui associe à chaque catégorie un entier, par exemple {"Logement": 2660, "Alimentation": 1500, ...}.

empreinte_ada.json est le fichier réel : des dictionnaires imbriqués détaillent les postes de consommation.

"Logement": {
    "Energie": {"Electricité": 206, "Cuisson": 105, "Chauffage individuel": 1500},
    "Construction": 650,
    "Location": 37,
    "Ameublement": 162
}

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.

1

Question 1Le total d'une empreinte à plat

Compléter le corps de la fonction total_simple. Ajouter un test permettant d'afficher l'empreinte carbone totale d'Ada, en utilisant les fonctions fournies pour accéder au fichier empreinte_ada_agr.json.

Appel professeur

À demander au candidat

  1. Votre boucle parcourt-elle les clés ou les valeurs du dictionnaire ? Comment obtenez-vous la valeur associée ?
  2. Que renvoie chargement_json ? Comment le vérifier dans la console ?
Point de vigilance

Parcourir empreinte donne les clés : il faut empreinte[cle], ou parcourir empreinte.values().

Résultats attendus
Empreinte totale d'Ada
7 252 kg
2

Question 2Le total récursif

En utilisant la fonction est_dictionnaire qui teste la nature d'une valeur, écrire le corps de la fonction récursive total_rec qui calcule la somme des valeurs numériques présentes dans des dictionnaires imbriqués. Des tests sont fournis dans la fonction test_total_rec, on pourra les compléter par un cas plus proche de la structure présente dans empreinte_ada.json.

Appel professeur

À demander au candidat

  1. Quel est le cas de base de votre fonction récursive ? Où se trouve l'appel récursif ?
  2. Que se passerait-il sans le test est_dictionnaire ?
  3. Pourquoi les deux fichiers d'Ada donnent-ils le même total ?
Point de vigilance

Chaque valeur est soit un nombre (on l'ajoute), soit un dictionnaire (on ajoute son total, calculé récursivement).

Résultats attendus
Fichier complet d'Ada
7 252 kg, comme la version agrégée
3

Question 3Une alerte trop pressée

Ada souhaite intégrer une fonctionnalité d'alerte : identifier si une source d'émission spécifique dépasse un certain seuil jugé critique. La fonction alerte_valeur_aberrante(empreinte, limite) est censée parcourir l'ensemble du dictionnaire, y compris les sous-catégories, et renvoyer la valeur booléenne True dès qu'une valeur strictement supérieure à la limite est rencontrée.

Lorsqu'on exécute la fonction alerte_valeur_aberrante sur le dictionnaire complet d'Ada avec une limite fixée à 1000, elle ne détecte aucune valeur aberrante, alors que le poste « Chauffage individuel » s'élève à 1500. Expliquer précisément l'origine de cette erreur de conception et proposer une version corrigée de la fonction.

Appel professeur

À demander au candidat

  1. Que renvoie l'appel récursif pour « Alimentation » ? Pourquoi la fonction s'arrête-t-elle alors ?
  2. Dans quel ordre les catégories sont-elles parcourues ? Le résultat dépend-il de cet ordre ?
Point de vigilance

return alerte_valeur_aberrante(valeur, limite) renvoie le résultat de la première sous-catégorie, même False, et abandonne les suivantes.

Résultats attendus
Code fourni, limite 1 000
False
Corrigé
True (Chauffage individuel : 1 500)
4

Question 4Un jeu de tests robuste

Afin de prévenir toute régression future sur la fonction alerte_valeur_aberrante corrigée, il convient de définir une stratégie de validation robuste. Proposer un jeu de tests pertinent pour cette fonction. Pour chaque cas de test envisagé, préciser la structure du dictionnaire fourni en entrée, le résultat attendu et la particularité algorithmique que ce test permet de vérifier.

Appel professeur

À demander au candidat

  1. Pour chacun de vos tests : quelle structure en entrée, quel résultat attendu, quelle particularité de l'algorithme ?
  2. Quel test aurait détecté l'erreur de la question 3 ?
Point de vigilance

Un bon jeu couvre : dictionnaire vide, égalité avec la limite, valeur au premier niveau, valeur dans une sous-catégorie qui n'est pas la première, imbrication profonde.

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 empreinte.py à ouvrir dans votre éditeur habituel.

Chargement de Python…