Contenu principal
Chapitre 5 · La boucle while › Leçon 3 sur 5

É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. 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 171001 - \frac{7}{100} soit 0.930.93

    réponse = 10000 * 0.93
  2. 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ée n et vaut donc initialement 10000.

    Solution

    On défini le compteur n initialisé à 0 et la variable émissions initialisée à 10000

    n = 0
    émissions = 10000
  3. 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 augmenter n 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ées n au bout desquelles l'objectif sera atteint.

    n = 0
    émissions = 10000
    while émissions > 4000:
        n = n + 1
        émissions = émissions * 0.93
    
    print(n)
  4. 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 renvoie n à la fin. Tu peux enlever la variable ré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 un return pour renvoyer n à 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. 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 atteindre s (4000 pour Diane) et le taux t auquel elle diminue ses émissions (7/100 pour Diane).

    Modifie la fonction objectif pour qu'elle prenne trois arguments q, s et t dans cet ordre. Modifie le corps de la fonction pour prendre en compte ces arguments. Ainsi Diane peut utiliser la fonction en exécutant objectif(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 et t

    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 t%t\%.

    Pour calculer cette diminution, il faut multiplier la variable par le coefficient multiplicateur 1t1 - t. 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. 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.

Chargement...

Collecte des fichiers...

>>>