Open In Colab

2.5.2. Exercice 5 - Bonnes pratiques de programmation#

2.5.2.1. Exercice 5.1: Classes#

image.png

Source de l’image : NASA Science

Q1) Ecrivez une classe planet avec deux attributs : nom et masse

# Écrivez votre classe ici
#@title Code à trous

class Planet :
  def __init__(____,inname=____,inmass=____):
    self.name = inname
    self.mass = inmass
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[2], line 3
      1 #@title Code à trous
----> 3 class Planet :
      4   def __init__(____,inname=____,inmass=____):
      5     self.name = inname

Cell In[2], line 4, in Planet()
      3 class Planet :
----> 4   def __init__(____,inname=____,inmass=____):
      5     self.name = inname
      6     self.mass = inmass

NameError: name '____' is not defined

Imprimer les attributs : nom et masse pour vérifier que votre classe fonctionne bien.

# Créer une nouvelle instance de cette classe pour représenter la Terre (masse=5,97e24kg)
terre = Planet(_______,_____)
# Créer une nouvelle instance de cette classe pour représenter Jupiter (masse=1898e24kg)
jupiter = Planet(_______,____)
#@title Code à compléter
# Comment vérifier que vous avez fait le bon choix ?
print(terre._____,terre.____)

Q2) Ajouter une méthode personnalisée is_light à la classe planet qui retourne True si la planète est strictement plus légère que Jupiter, False strictement plus lourde que Jupiter, et ‘same mass!’ si la planète pèse le même poids que Jupiter.

# Améliorez votre classe ici
#@title Code à trous

# Changez votre classe ici
# Conseil : Utiliser des majuscules pour les noms de classe
class Planet :
  def __init__(____,inname=____,inmass=____):
    self.name = inname
    self.mass = inmass
  def is_light(____) :
    if ___________<1898e24:
      print('True')
    elif ____________>1898e24:
      print('False')
    else :
      print('same mass!')
# Demandez à Python si la Terre est plus légère que Jupiter, vous devriez voir True pour cette question !
Planet(_____,_____).is_light()
# Demandez à Python si Jupiter est plus léger qu'elle-même, vous devriez voir same mass ! pour celle-ci !
Planet(_____,_____).is_light()

2.5.2.2. 💻 Exercice 5.2 : Maîtrisez Git et GitHub 🔄#

Dans cet exercice, vous allez créer un mini-projet, suivre les modifications avec Git, et simuler des situations de développement réelles. L’objectif est de vous familiariser avec les commandes Git les plus utiles : init, add, commit, log, et push (si vous utilisez GitHub).

Contexte : Vous travaillez sur un projet de calculatrice et devez utiliser Git pour suivre l’évolution de votre code.

ben-wicks-LK4sk81TZh8-unsplash.jpg

Source de l’image : Ben Wicks (Unsplash)

Q1) Initialiser le projet en:

  1. Créant un nouveau dossier Projet_Calculatrice pour votre projet,

  2. Se déplaçant dans ce dossier

  3. Initialisant un dépôt Git dans ce dossier.

# Étape 1
# Étape 2
# Étape 3
#@title Solution

!mkdir Projet_Calculatrice
%cd /content/Projet_Calculatrice/
# (Fait l'hypothèse de l'espace Colab /content/ standard)
!git init

Q2) Ajouter un fichier calculatrice.py au projet et effectuer un git commit pour son squelette (première version)

# Créer le fichier .py avec e.g., touch
# Ajouter du contenu au fichier avec par exemple echo
# Syntaxe: !echo "text" > calculatrice.py
# vous pouvez aussi directement naviguer et écrire dans le fichier
# Effectuer le git commit
#@title Solution

!touch calculatrice.py
!echo "def addition(a, b):\n    return a + b" > calculatrice.py
!git add calculatrice.py
# Avant de valider le commit, ajoutons notre identité
# Gardons cette identité anonyme pour l'exemple
!git config --global user.email "you@example.com"
!git config --global user.name "Your Name"
!git commit -m "Ajout de la fonction addition"

Q3) Modifier le code et créer un nouveau commit (deuxième version)

# Ajouter du code à votre fichier calculatrice.py, e.g., avec echo
# Ajouter cette modification à l'index avec git add
# Effectuer un nouveau commit pour valider cette modification
# Écrire un message en utilisant l'argument (flag) -m
#@title Solution

# Exemple avec l'ajout de la fonction soustraction
!echo "\ndef soustraction(a, b):\n    return a - b" >> calculatrice.py
!git add calculatrice.py
!git commit -m "Ajout de la fonction soustraction"

Q4) Afficher l’historique du projet

Indice : git log

# Afficher l'historique ici

Q5) Ajouter et valider un nouveau fichier README.md

# Créer un fichier README.md pour documenter le projet
# L'ajouter au suivi de Git et effectuer un commit
#@title Solution

!touch README.md
!echo "# Projet Calculatrice\n\nCe projet contient des fonctions simples de calcul." > README.md
!git add README.md
!git commit -m "Ajout du fichier README.md"

Dernière étape : Pousser le projet vers GitHub

  1. Configurez GitHub pour héberger votre projet en ligne : Si vous avez un compte GitHub, vous pouvez pousser votre projet en ligne. Voici les étapes :

  • Créez un dépôt sur GitHub (en ligne).

  • Ajoutez l’URL de votre dépôt distant :

# N'oubliez pas d'utiliser votre "GitHub handle ci-dessous"
!git remote add origin https://github.com/votre-utilisateur/Projet_Calculatrice.git
!git push -u origin master

2.5.2.3. Exercice 5.3 : 🌬️ Évaluer la qualité de l’air avec des tests unitaires#

Dans cet exercice, vous allez écrire des tests unitaires pour vérifier une fonction qui évalue la qualité de l’air en fonction de l’indice AQI (Air Quality Index). Le but est de s’assurer que la fonction fonctionne correctement en fonction des différents niveaux de qualité de l’air.

anne-nygard-vc-vPgGqAr4-unsplash.jpg

Prêt·e à relever le défi ? ⛈

Source de l’image : Anne Nygård

Q1) Écrire la fonction evaluation_qualite_air qui évaluera la qualité de l’air selon l’AQI.

📝 Cahier des charges : Comment la fonction doit-elle se comporter ?

  • Si l’AQI est inférieur ou égal à 50, elle renvoie “Bonne”.

  • Si l’AQI est compris entre 51 et 100, elle renvoie “Modérée”.

  • Si l’AQI est supérieur à 100, elle renvoie “Mauvaise”.

# Écrire la fonction ici
#@title ou complétez la fonction ci-dessous

def evaluation_qualite_air(aqi):
    if aqi <= 50:
        return "______"
    elif 51 <= aqi <= 100:
        return "_______"
    else:
        return "________"

Q2) 🧪 Écrire les tests unitaires

Maintenant que la fonction est prête, il est temps d’écrire des tests unitaires pour la vérifier ! Nous allons utiliser le module unittest (n’oubliez pas de l’importer) pour tester notre fonction avec différents niveaux d’AQI.

📝 Cahier des charges - version 2 : Quels cas de tests unitaires devons-nous écrire pour couvrir les différents scénarios ?

  • AQI = 30 → Devrait retourner “Bonne”

  • AQI = 75 → Devrait retourner “Modérée”

  • AQI = 150 → Devrait retourner “Mauvaise”

# Écrire les tests ici
#@title ou complétez le squelette de code à trous ci-dessous

import unittest

class TestQualiteAir(unittest.TestCase):

    def test_bonne_qualite(self):
        # Vérifiez qu'un AQI de 30 est évalué comme "Bonne"
        self.assertEqual(evaluation_qualite_air(____), "_____")

    def test_moderee_qualite(self):
        # Vérifiez qu'un AQI de 75 est évalué comme "Modérée"
        self.assertEqual(evaluation_qualite_air(____), "_____")

    def test_mauvaise_qualite(self):
        # Vérifiez qu'un AQI de 150 est évalué comme "Mauvaise"
        self.assertEqual(evaluation_qualite_air(____), "________")

Q3) Vérifier que tout fonctionne bien

# Exécutez les tests
unittest.main(argv=[''], exit=False)

Vous devriez voir quelque chose comme cela:

image.png