Épreuve pratique NSI

Sujet n° 16 · Session 2026 · 1 heure

Les bandes du réchauffement climatique

Les « warming stripes » résument 175 ans de températures mondiales en bandes de couleur. Le candidat cherche un écart par année, trouve la dernière année froide, corrige une moyenne au signe inversé, puis trace les bandes.

  • Liste de dictionnaires
  • Recherche séquentielle
  • Tests
  • Débogage
  • Graphique matplotlib

Mise en situationLes données

Conçues par le climatologue Ed Hawkins en 2018, les warming stripes représentent l'évolution des températures par rapport à une moyenne historique. Le fichier datas.csv, issu de l'agence américaine d'observation océanique et atmosphérique (NOAA), contient les écarts de température mondiale par rapport à la moyenne du XXe siècle (1901-2000), pour chaque année de 1851 à 2025. La ligne 2020,1.01 signifie qu'en 2020 la température moyenne mondiale était supérieure de 1,01 °C à la moyenne de référence.

Warming stripes de 1851 à 2025
warming_stripes.png : du bleu (plus froid que la référence) au rouge (plus chaud).

La fonction charger(fichier) lit ce fichier et renvoie une liste de dictionnaires, un par année, avec les clés 'année' (entier) et 'écart' (flottant).

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 1L'écart d'une année

Écrire la fonction ecart_temperature(datas, annee) qui prend en paramètres la liste des données et une année cible. Elle doit renvoyer l'écart de température correspondant à cette année, ou None si l'année n'est pas présente dans les données.

Rédiger ensuite un jeu de tests (via des assertions) permettant de vérifier le bon fonctionnement de votre fonction, y compris pour une année hors du jeu de données.

Appel professeur

À demander au candidat

  1. Votre fonction parcourt-elle toute la liste quand l'année est trouvée tôt ? Pourquoi return dans la boucle suffit-il ?
  2. Où placez-vous le return None ? Que se passerait-il s'il était dans la boucle ?
  3. Quels cas vos assertions couvrent-elles ?
Point de vigilance

Le return None se place après la boucle, une fois toutes les années examinées.

Résultats attendus
2020
1,01 °C
1800
None
2

Question 2La dernière année plus froide

En utilisant la fonction derniere_annee_ecart_negatif (déjà fournie et qui utilise votre fonction), déterminer quelle a été la dernière année où la température mondiale était inférieure à la moyenne de référence.

Appel professeur

À demander au candidat

  1. Décrivez la boucle while de derniere_annee_ecart_negatif : d'où part-elle, et quand s'arrête-t-elle ?
  2. Que se passerait-il si aucune année n'avait un écart négatif ?
Point de vigilance

Si ecart_temperature renvoyait None pour une année absente, la comparaison ecart >= 0 lèverait une erreur : la fonction suppose des années consécutives.

Résultats attendus
Dernière année sous la moyenne
1977
3

Question 3Une prévision absurde

La fonction prevision(datas, annee, n), dont le code est fourni, effectue une régression linéaire sur les n dernières années pour estimer l'écart de température d'une année future : elle calcule une droite proche des points des n dernières années et renvoie l'ordonnée du point de cette droite dont l'abscisse est l'année cible.

En exécutant prevision(datas_temperature, 2040, 20), le résultat obtenu semble absurde compte tenu du réchauffement actuel. Cette absurdité provient d'une erreur de logique qui s'est glissée dans la fonction annexe moyenne_ecarts. Analyser le code de cette fonction, identifier l'erreur, et la corriger. Que devient alors la prévision pour 2040 ?

Appel professeur

À demander au candidat

  1. Pourquoi une prévision négative pour 2040 est-elle absurde au vu des données ?
  2. Comment avez-vous localisé l'erreur dans moyenne_ecarts ? Quel test simple l'aurait révélée ?
Point de vigilance

Un signe : somme - dico['écart'] au lieu de +. La moyenne sur 2006-2025 vaut alors −0,84 au lieu de +0,84.

Résultats attendus
Prévision 2040, code fourni
−0,11 °C
Prévision 2040, corrigé
+1,57 °C
4

Question 4Tracer les bandes

On souhaite générer la représentation graphique des warming stripes. Dans la fonction graphique(datas), le code pour gérer les couleurs (du bleu pour le froid au rouge pour le chaud) est déjà préparé. Compléter le code de la fonction en générant les listes annees (pour l'axe des abscisses) et ordonnees. Pour obtenir des bandes colorées de hauteur uniforme couvrant tout le graphique, la liste ordonnees devra contenir la valeur 1 pour chaque année traitée.

Appel professeur

À demander au candidat

  1. Pourquoi toutes les ordonnées valent-elles 1 ? Qu'est-ce qui porte l'information dans ce graphique ?
  2. Les listes annees, ordonnees et temperatures doivent avoir la même longueur. Pourquoi ?
Point de vigilance

Les trois listes sont construites à partir de datas, dans le même ordre.

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

Chargement de Python…