Émissions de CO2
En 2026 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 2027 ? Donne ta réponse dans la variable
réponseSolution
Il faut diminuer la quantité émise en 2026 de 7% donc on multiplie 10 000 par le coefficient multiplicateur soit
réponse = 10000 * 0.93 - 2
Alaine 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
nqui 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
émissionsqui correspond aux émissions de l'annéenet vaut donc initialement 10000.Solution
On défini le compteur
ninitialisé à 0 et la variableémissionsinitialisé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é
whilesuivi 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 > 4000de sorte que le code indenté ne s'exécute pas si la variableémissionsest inférieure ou égale à 4000.Que se passe-t-il dans la boucle while ? Le code indenté correspond au code exécuté lorsque
émissionsest supérieure à 4000. Dans ce cas, il faut augmenternde 1 pour indiquer qu'une année passe, et diminuerémissionsde 7% pour prendre en compte l'amélioration des émissions cette année là.Pour ça on effectue les réassignations
n = n+1etémissions = émissions * 0.93Observe 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
printen-dehors de la boucle pour afficher le nombre d'annéesnau 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
objectifdont le corps contient le code précédent et qui renvoienà la fin. Tu peux enlever la variableréponsequi ne sert plus.Solution
La fonction
objectifcontient toute la logique code précédente. Il faut donc indenter le code de la question précédente dans la fonction et utiliser unreturnpour 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 Alaine), la quantité seuil que l'entreprise souhaite atteindres(4000 pour Alaine) et le tauxtauquel elle diminue ses émissions (7/100 pour Alaine).Modifie la fonction
objectifpour qu'elle prenne trois argumentsq,settdans cet ordre. Modifie le corps de la fonction pour prendre en compte ces arguments. Ainsi Alaine peut utiliser la fonction en exécutantobjectif(10000, 4000, 7/100)Solution
La fonction
objectifdé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 d'Alaine apparaissent, et les remplacer à l'aide des variables
q,settLa quantité
qcorrespond aux émissions initiales en 2026. On peut donc remplacer l'initialisationémissions = 10000qui est spécifique à Alaine parémissions = qLe seuil
scorrespond à l'objectif visé par l'entreprise. Il est lié à la condition d'arrêt. Donc on remplace la conditionémissions > 4000spécifique à Alaine 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.93par 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 d'Alaine 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
objectifdans la console avec les bons arguments pour savoir dans combien d'années le concurrent atteindra ses objectifs.Solution
On appelle la fonction
objectifdans la console avec les arguments de la question.>>> objectif(15000, 5000, 10/100) 11Donc l'entreprise concurrente atteindra son objectif dans 11 ans.