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
Utilisez 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
Remarques

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}")