POO, documentation et tests - TP1

Programmation Python et Visual Studio Code
Author

Ludovic Deneuville

1 Créer l’arborscence

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

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):

    • VM ou machine perso : sur le bureau > clic droit > Git Bash here
    • Datalab : Terminal > New Terminal (ou CTRL + ù)
    • mkdir -p IPOO/TP1/Exercice_{1..7}/ && touch IPOO/TP1/Exercice_{1..7}/ex.py
    • dans Git Bash : clic droit > Paste ou MAJ + INSER
ImportantUtilisez le lecteur P: (si vous êtes sur la VM)

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 Fonctions

Important

Les fonctions permettent de :

  • réutiliser du code (éviter d’écrire deux fois la même chose)
  • simplifier
  • organiser

2.1 Définition

Parallèle avec les mathématiques, par exemple : \(f : x, y \mapsto x^2 + y + 1\)

  • nom de la fonction : f
  • paramètres d’entrée : x, y
  • sortie : \(x^2 + y + 1\)

En Python pour définir la fonction :

def f(x, y):
    return x**2 + y + 1

2.2 Utilisation

En maths : \(f(3, 4) = 3^2 + 4 + 1 = 14\)

En Python, on ferait de même en appelant la fonction :

# Appel par positions des paramètres
resultat = f(3, 4)
print(resultat)

# Appel par noms des paramètres
resultat = f(x=3, y=4)

2.3 Template

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

def ma_fonction(param1, param2=valeur_par_defaut) -> type_retour:
    """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
NoteRemarques

Il est tout à fait possible pour une fonction de :

  • ne prendre aucun paramètre en entrée
  • ne rien retourner (None)

3 Exercices

Visual Studio Code (VS Code) est un éditeur de code source développé par Microsoft, gratuit et open-source, conçu pour être léger et performant. Il est compatible avec de très nombreux langages de programmation : Python, R, Java, JavaScript, C++…

3.1 Exercice 1

Rappels : le terminal Git Bash et les commandes Unix

Vous pouvez maintenant écrire et éxécuter du code Python.

Collections usuelles

Type de Donnée Ordonné Mutable Doublon
list ✔ ✔ ✔
dict ✔
tuple ✔ ✔
set ✔

Fonctions et méthodes

  • fonction sorted(liste)
    • paramètre : une liste
    • retourne : une nouvelle liste triée
  • méthode liste.sort()
    • paramètre : aucun
    • s’applique à l’objet liste
    • retourne : rien (par contre elle modifie la liste initiale)

3.2 Exercice 2

print("|{:{}{}}|".format('abc', '<', 14))
print("|{:{}{}}|".format('abc', '>', 10))
print("|{:{}{}}|".format('abc', '^', 7))

Avec des f-strings :

chaine = 'abc'

print(f"|{chaine:<8}|")
print(f"|{chaine:>12}|")
print(f"|{chaine:^16}|")

4 Aides

4.1 Parcours de listes

La fonction enumerate() permet de boucler sur une liste en utilisant à la fois l’index et la valeur des éléments.

liste = ["Anaïs", "Benoit", "Camille"]

# Par valeurs
for v in liste:
    print(v)

# Par index
for i in range(len(liste)):
    print(liste[i])

# Index et valeurs
for i, v in enumerate(liste):
    print(f"index {i} : valeur {v}")

Si vous avez une erreur d’index, vous pouvez encapsuler votre code dans un bloc try/except.

try:
    if liste1[i] > 0:
    ...
except IndexError:
    print(f"Index error : {i}")

4.2 Parcours de dictionnaires

dico = {"d":"Dominique", "e":"Eva", "f":"Fernande"}

# Par clés
for k in dico.keys():
    print(f"{k} : {dico[k]}")

# Par valeurs
for v in dico.values():
    print(v)

# Clés et valeurs
for k, v in dico.items():
    print(f"clé {k} : valeur {v}")