POO, documentation et tests - TP2

Modules, style de code, exceptions et tests
Author

Ludovic Deneuville

1 Créer l’arborscence

└── P
    └── Cours1A
        └── IPOO
            ├── TP1
            │   ├── Exercice_1
            │   │   └── ex.py
            │   ├── Exercice_2
            │   │   └── ex.py
            │   ├── ...
            │   └── Exercice_7
            │       └── ex.py
            ├── TP2
            │   ├── Exercice_1
            │   │   └── ex.py
            │   ├── Exercice_2
            │   ├── ...

Pour prendre la bonne habitude de bien ranger vos fichiers, vous allez créer l’arborscence ci-dessus. Vous pouvez créer chaque dossier et fichier à la main, ou utiliser les commandes ci-dessous (mkdir : make directory):

    • Sur le bureau > clic droit > Git Bash here
    • mkdir -p /p/Cours1A/IPOO/TP2/Exercice_{1..5}/ && touch /p/Cours1A/IPOO/TP2/Exercice_{1..5}/ex.py
    • dans Git Bash : clic droit > Paste ou MAJ + INSER
Utilisez le lecteur P:

Il est important de stocker vos fichiers dans votre lecteur P: et pas sur votre bureau ou votre disque C: car vos fichiers risqueraient de disparaitre !

2 Moodle

3 Visual Studio Code

      • dans votre Explorer à gauche apparait l’arborescence des dossiers et fichiers de Exercice_1

4 Exercices

4.1 Exercice 1

Flake8 est un linter. Il vérifie la mise en forme de votre code et souligne en rouge ce qui ne lui plait pas.

4.2 Exercice 2

Les doctest vu au TP1 ne sont pas utilisés en pratique car cela surcharge les modules. On préfère exporter les tests dans des modules à part. Si l’on veut tester le module produit.py :

  • on crée dans le même package, un module test_produit.py

  • dans test_produit.py, on importe produitet pytest :

    import pytest
    from produit import produit

4.3 Exercice 3

4.4 Exercice 4

  • Inscription
      • Exemple pour lever une exception

        if adresse_electronique.count('@') != 1:
            raise ValueError(
                "L'adresse électronique doit contenir un seul symbole @."
            )
    • base_de_donnees : list[tuple[str, str]]

5 Template doc

Voici un modèle que vous pouvez utiliser pour documenter vos fonctions

def ma_fonction(param1, param2):
    """description_courte

    description_longue

    Parameters
    ----------
    param1 : type (str, int, float, list...)
        description_param1
    param2 : type
        description_param2

    Returns
    -------
    type_retour
        description_retour

    Examples
    --------
    >>> 1+1
    2
    >>> print("abc")
    abc
    >>> ma_fonction(xxx, yyy)
    valeur_esperee
    """
    return None


if __name__ == '__main__':
    a = ma_fonction(p1, p2)
    print(a)