Émissions de CO2
En 2025 une entreprise émet 10 000 tonnes de CO2. Soucieuse de son impact environnemental elle s'engage à réduire ses émissions de 7% par an, pour atteindre un objectif de 4000 tonnes.
Combien d'années sont nécessaires pour atteindre l'objectif ?
- 1
Quelle est la quantité de CO2 émise par l'entreprise en 2026 ? Donne ta réponse dans la variable
réponse
Solution
Il faut diminuer la quantité émise en 2025 de 7% donc on multiplie 10 000 par le coefficient multiplicateur soit
réponse = 10000 * 0.93
- 2
Diane la gérante souhaite savoir dans combien d'années l'objectif est atteint. Aidons-la à trouver la réponse à l'aide d'une boucle while : tant que l'objectif n'est pas atteint, une année de plus passe et les émissions diminuent de 7%.
Pour cela, défini une variable
n
qui vaut initialement 0. Cette variable va servir à compter les années une à une, c'est ce qu'on appelle un compteur.Défini également une variable
émissions
qui correspond aux émissions de l'annéen
et vaut donc initialement 10000.Solution
On défini le compteur
n
initialisé à 0 et la variableémissions
initialisée à 10000n = 0 émissions = 10000
- 3
À toi d'écrire la boucle while : si tu as un doute tu peux regarder rapidement les leçons précédentes. N'oublie pas de vérifier la condition d'arrêt pour éviter d'avoir une boucle infinie, sinon ton navigateur va planter. Il faut aussi réassigner correctement les variables à chaque itération.
Solution
La syntaxe d'une boucle while doit contenir le mot-clé
while
suivi d'une condition d'arrêt puis deux points et un bloc indenté.Ici tant que l'objectif de 4000 tonnes n'est pas atteint, une année supplémentaire passe. Donc la condition d'arrêt est
émissions > 4000
de sorte que le code indenté ne s'exécute pas si la variableémissions
est inférieure ou égale à 4000.Que se passe-t-il dans la boucle while ? Le code indenté correspond au code exécuté lorsque
émissions
est supérieure à 4000. Dans ce cas, il faut augmentern
de 1 pour indiquer qu'une année passe, et diminuerémissions
de 7% pour prendre en compte l'amélioration des émissions cette année là.Pour ça on effectue les réassignations
n = n+1
etémissions = émissions * 0.93
Observe d'ailleurs que la variable émission est réaffectée à une valeur positive de plus en plus petite ce qui nous assure qu'il n'y a pas de boucle infinie puisqu'elle finira par être inférieure ou égale à 4000.
On ajoute un
print
en-dehors de la boucle pour afficher le nombre d'annéesn
au bout desquelles l'objectif sera atteint.n = 0 émissions = 10000 while émissions > 4000: n = n + 1 émissions = émissions * 0.93 print(n)
- 4
D'autres entreprises souhaitent également savoir dans combien de temps leurs objectifs seront atteints. Nous allons adapter ton code pour qu'il soit réutilisable.
Défini pour commencer une fonction
objectif
dont le corps contient le code précédent et qui renvoien
à la fin. Tu peux enlever la variableréponse
qui ne sert plus.Solution
La fonction
objectif
contient toute la logique code précédente. Il faut donc indenter le code de la question précédente dans la fonction et utiliser unreturn
pour renvoyern
à la fin.De plus pour l'instant cette fonction ne dépend d'aucun argument. On améliorera ça dans la question suivante. Donc la liste des arguments est vide.
def objectif(): n = 0 émissions = 10000 while émissions > 4000: n = n + 1 émissions = émissions * 0.93 return n
- 5
Quels sont les paramètres qui peuvent varier d'une entreprise à l'autre ? Il y a la quantité initiale d'émissions
q
(10000 dans le cas de Diane), la quantité seuil que l'entreprise souhaite atteindres
(4000 pour Diane) et le tauxt
auquel elle diminue ses émissions (7/100 pour Diane).Modifie la fonction
objectif
pour qu'elle prenne trois argumentsq
,s
ett
dans cet ordre. Modifie le corps de la fonction pour prendre en compte ces arguments. Ainsi Diane peut utiliser la fonction en exécutantobjectif(10000, 4000, 7/100)
Solution
La fonction
objectif
dépend en fait de trois arguments : la quantité initiale d'émissions, le seuil d'émissions visé et le pourcentage d'amélioration annuel. On commence par modifier l'en-tête de la fonction pour la faire dépendre de ces trois paramètres.Il faut ensuite repérer dans notre code les endroits où des valeurs spécifiques à l'entreprise de Diane apparaissent, et les remplacer à l'aide des variables
q
,s
ett
La quantité
q
correspond aux émissions initiales en 2025. On peut donc remplacer l'initialisationémissions = 10000
qui est spécifique à Diane parémissions = q
Le seuil
s
correspond à l'objectif visé par l'entreprise. Il est lié à la condition d'arrêt. Donc on remplace la conditionémissions > 4000
spécifique à Diane parémission > s
. Ainsi tant que l'objectif cible n'est pas atteint, on poursuit les efforts.Enfin, toutes les entreprises ne s'améliorent pas à la même vitesse. Le pourcentage d'amélioration annuel est donné par la variable
t
. On peut donc modifier la réassignationémissions = émissions * 0.93
par une diminution des émissions de .Pour calculer cette diminution, il faut multiplier la variable par le coefficient multiplicateur . Donc la réassignation est
émissions = émissions * (1 - t)
def objectif(q, s, t): n = 0 émissions = q while émissions > s: n = n + 1 émissions = émissions * (1 - t) return n
- 6
Une entreprise concurrente de celle de Diane diminue ses émissions de 10% par an. Elle souhaite atteindre un objectif de 5000 tonnes et ses émissions actuelles sont de 15000 tonnes.
Appelle la fonction
objectif
dans la console avec les bons arguments pour savoir dans combien d'années le concurrent atteindra ses objectifs.Solution
On appelle la fonction
objectif
dans la console avec les arguments de la question.>>> objectif(15000, 5000, 10/100) 11
Donc l'entreprise concurrente atteindra son objectif dans 11 ans.