Sujet n° 20 · Session 2026 · 1 heure
L'empreinte carbone de nos usages numériques
E-mails, streaming, recherches, stockage : combien de CO2 pèse un mois d'usages numériques ? Le candidat calcule une empreinte, classe les activités par impact, teste une comparaison, puis corrige une division par zéro.
- Dictionnaires
- Parcours de clés
- Tests et assertions
- Division par zéro
- Cas limites
Mise en situationLes émissions
Le numérique représente environ 4 % des émissions mondiales de gaz à effet de serre. On estime l'empreinte d'un utilisateur, en grammes de CO2 équivalent (gCO2e), à partir de ses usages mensuels :
| Activité | Clé | Émission unitaire |
|---|---|---|
| E-mail sans pièce jointe | 'emails_simples' | 4 gCO2e par e-mail |
| E-mail avec pièce jointe (1 Mo) | 'emails_pj' | 19 gCO2e par e-mail |
| Streaming vidéo SD | 'streaming_sd' | 36 gCO2e par heure |
| Streaming vidéo HD | 'streaming_hd' | 100 gCO2e par heure |
| Recherche web | 'recherches' | 7 gCO2e par recherche |
| Stockage cloud | 'stockage_cloud' | 10 gCO2e par Go et par mois |
Un utilisateur est un dictionnaire de ses usages mensuels ; une activité absente vaut 0.
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 1L'empreinte d'un utilisateur
Écrire en Python le code de la fonction calculer_empreinte(utilisateur) qui prend en paramètre un dictionnaire représentant les usages d'un utilisateur et qui renvoie l'empreinte carbone totale mensuelle en gCO2e, de type entier. Par exemple, calculer_empreinte(utilisateur1) renvoie la valeur 7490.
Appel professeur
À demander au candidat
- Votre boucle parcourt-elle les clés de l'utilisateur ou celles de
EMISSIONS? Quelle conséquence si un utilisateur n'a pas toutes les activités ? - Pourquoi le résultat est-il un entier ?
Parcourir les clés de l'utilisateur évite une KeyError quand une activité est absente (utilisateur2, utilisateur6).
Résultats attendus
- utilisateur1
- 7 490 gCO2e
- utilisateur2
- 1 970 gCO2e
- utilisateur6
- 0
Question 2Classer par impact
Écrire en Python le code de la fonction classer_par_impact(utilisateur) qui prend en paramètre un dictionnaire représentant les usages d'un utilisateur et qui renvoie un dictionnaire contenant trois clés 'fort', 'moyen' et 'faible', chacune associée à une liste des noms des activités correspondantes :
- impact
'fort': émissions ≥ 1000 gCO2e ; - impact
'moyen': 200 gCO2e ≤ émissions < 1000 gCO2e ; - impact
'faible': émissions < 200 gCO2e.
Par exemple, pour utilisateur2 (streaming_hd : 1500 gCO2e, emails_simples : 400 gCO2e, recherches : 70 gCO2e), la fonction renvoie {'fort': ['streaming_hd'], 'moyen': ['emails_simples'], 'faible': ['recherches']}.
Appel professeur
À demander au candidat
- Pourquoi tester d'abord
>= 1000, puis>= 200? Que se passerait-il dans l'ordre inverse ? - Comment initialisez-vous le dictionnaire résultat, et pourquoi avec trois listes vides ?
Les bornes : 1 000 est « fort », 200 est « moyen ». L'ordre des tests évite de réécrire chaque intervalle.
Résultats attendus
- utilisateur1, fort
- streaming_hd, recherches
- utilisateur1, moyen
- emails_simples, emails_pj, streaming_sd
- utilisateur1, faible
- stockage_cloud
Question 3Tester la comparaison
La fonction comparer(utilisateur1, utilisateur2), dont le code est fourni, renvoie un dictionnaire associant à chaque activité la différence des émissions entre les deux utilisateurs : l'émission de l'utilisateur 2 moins celle de l'utilisateur 1. Si une activité est absente chez un utilisateur, on considère que son émission vaut 0.
Compléter le code de la fonction test_comparer en ajoutant au moins deux tests pertinents qui permettent de vérifier différents aspects du comportement de la fonction. Pour chaque test ajouté, une brève justification doit être donnée afin d'expliquer pourquoi ce cas est important à vérifier. D'autres utilisateurs peuvent être créés lors de l'écriture des tests.
Appel professeur
À demander au candidat
- Justifiez chacun de vos tests : quel aspect de
comparervérifie-t-il ? - Que doit renvoyer
comparer(u, u)? Et que devient le résultat si l'on échange les deux utilisateurs ?
Des tests pertinents couvrent une activité absente, deux utilisateurs identiques, l'échange des utilisateurs, ou un utilisateur vide.
Question 4Une division par zéro
Pour mieux percevoir l'écart entre les usages de deux utilisateurs, on utilise la formule :
La fonction comparer_v2(utilisateur1, utilisateur2), dont le code est fourni, renvoie un dictionnaire associant à chaque activité ce pourcentage d'écart. Par exemple, comparer_v2(utilisateur1, utilisateur2) renvoie {'emails_pj': -100.0, 'emails_simples': -33.33333333333333, 'recherches': -98.0, 'stockage_cloud': -100.0, 'streaming_hd': -40.0, 'streaming_sd': -100.0}.
Dans certains cas, on constate que cette fonction provoque une erreur. Identifier dans quels cas l'erreur se produit et proposer une correction.
Appel professeur
À demander au candidat
- Dans quels cas l'erreur se produit-elle ? Donnez un exemple avec les utilisateurs fournis.
- Quelle valeur choisir quand l'émission de référence est nulle :
None, 0, l'infini ? Défendez votre choix.
L'erreur survient dès qu'une activité est absente chez le premier utilisateur : comparer_v2(utilisateur2, utilisateur1) lève une ZeroDivisionError.
Plusieurs corrections sont recevables si le candidat les justifie.
Résultats attendus
comparer_v2(utilisateur1, utilisateur2)- aucune erreur
comparer_v2(utilisateur2, utilisateur1)ZeroDivisionError
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 code_empreinte.py à ouvrir dans votre éditeur habituel.