Partie 3 : Modules et mise au point
1. Les modules en Python
Section intitulée « 1. Les modules en Python »1.1 Qu'est-ce qu'un module ?
Section intitulée « 1.1 Qu'est-ce qu'un module ? »Un module est un fichier Python (.py) contenant des fonctions, des constantes et des classes réutilisables. Les modules permettent de :
- Organiser le code en fichiers thématiques
- Réutiliser du code sans le réécrire
- Partager du code avec d'autres développeurs
Python dispose d'une riche bibliothèque standard (modules inclus par défaut) et de nombreuses bibliothèques tierces installables.
1.2 Importer un module
Section intitulée « 1.2 Importer un module »Il existe plusieurs façons d'importer un module :
# Import du module entierimport mathprint(math.sqrt(16)) # 4.0print(math.pi) # 3.141592653589793
# Import de fonctions spécifiquesfrom math import sqrt, piprint(sqrt(16)) # 4.0print(pi) # 3.141592653589793
# Import avec aliasimport math as mprint(m.sqrt(16)) # 4.01.3 Modules de la bibliothèque standard
Section intitulée « 1.3 Modules de la bibliothèque standard »| Module | Contenu | Exemples |
|---|---|---|
math | Fonctions mathématiques | sqrt(), floor(), ceil(), pi, e |
random | Nombres aléatoires | randint(), choice(), shuffle() |
csv | Lecture/écriture de fichiers CSV | reader(), DictReader() |
os | Interaction avec le système | listdir(), path.exists() |
time | Mesure du temps | time(), sleep() |
json | Manipulation de données JSON | loads(), dumps() |
doctest | Tests dans les docstrings | testmod() |
1.4 Exemples d'utilisation
Section intitulée « 1.4 Exemples d'utilisation »import math
# Arrondi, plancher, plafondprint(math.floor(3.7)) # 3 (arrondi vers le bas)print(math.ceil(3.2)) # 4 (arrondi vers le haut)print(round(3.5)) # 4 (arrondi au plus proche)
# Racine carrée et puissanceprint(math.sqrt(144)) # 12.0print(math.log2(1024)) # 10.0
import random
# Nombre aléatoireprint(random.randint(1, 6)) # dé à 6 facesprint(random.choice(["pile", "face"]))liste = [1, 2, 3, 4, 5]random.shuffle(liste) # mélange en placeprint(liste)1.5 Créer son propre module
Section intitulée « 1.5 Créer son propre module »Tout fichier Python est un module. Pour créer le module outils.py :
def est_pair(n): """Vérifie si n est pair.""" return n % 2 == 0
def maximum(a, b): """Renvoie le plus grand de a et b.""" if a >= b: return a return bPour l'utiliser depuis un autre fichier :
from outils import est_pair, maximum
print(est_pair(42)) # Trueprint(maximum(7, 12)) # 121.6 Le bloc if __name__ == "__main__"
Section intitulée « 1.6 Le bloc if __name__ == "__main__" »Quand un fichier Python est importé comme module, tout le code au niveau du fichier est exécuté. Pour éviter que les tests s'exécutent à l'importation, on les place dans un bloc spécial :
def est_pair(n): return n % 2 == 0
if __name__ == "__main__": # Ce bloc ne s'exécute QUE si on lance outils.py directement # Il ne s'exécute PAS quand on fait "import outils" assert est_pair(4) == True assert est_pair(7) == False print("Tests OK !")1.7 Consulter la documentation
Section intitulée « 1.7 Consulter la documentation »Pour connaître les fonctions disponibles dans un module :
>>> import math>>> help(math) # documentation complète du module>>> help(math.sqrt) # documentation d'une fonction>>> dir(math) # liste des noms définis dans le module2. Mise au point de programmes
Section intitulée « 2. Mise au point de programmes »2.1 Les types d'erreurs
Section intitulée « 2.1 Les types d'erreurs »| Type | Détection | Exemple |
|---|---|---|
| Erreur de syntaxe | Avant l'exécution | if x = 5: (= au lieu de ==) |
| Erreur d'exécution | Pendant l'exécution | Division par zéro, indice hors limites |
| Erreur de logique | Résultat incorrect | Algorithme faux, condition inversée |
Les erreurs de syntaxe et d'exécution sont signalées par Python. Les erreurs de logique sont les plus difficiles à trouver car le programme « tourne » mais produit un résultat faux.
2.2 Les messages d'erreur de Python
Section intitulée « 2.2 Les messages d'erreur de Python »Python affiche un traceback qui indique :
- Le fichier et le numéro de ligne de l'erreur
- Le type d'erreur (TypeError, ValueError, IndexError...)
- Un message explicatif
>>> notes = [12, 15, 8]>>> print(notes[5])Traceback (most recent call last): File "<stdin>", line 1, in <module>IndexError: list index out of rangeErreurs courantes :
| Erreur | Cause | Exemple |
|---|---|---|
SyntaxError | Faute de syntaxe | if x = 5: |
NameError | Variable non définie | print(abc) sans définir abc |
TypeError | Type incompatible | "3" + 5 |
IndexError | Indice hors limites | [1, 2, 3][5] |
KeyError | Clé absente dans un dictionnaire | d["cle_inexistante"] |
ZeroDivisionError | Division par zéro | 10 / 0 |
ValueError | Valeur invalide | int("abc") |
2.3 Technique 1 : affichages intermédiaires
Section intitulée « 2.3 Technique 1 : affichages intermédiaires »La technique la plus simple consiste à ajouter des print() pour afficher l'état des variables à des endroits stratégiques :
def recherche_max(tableau): """Renvoie l'indice du maximum.""" i_max = 0 for i in range(1, len(tableau)): print(f" i={i}, tableau[i]={tableau[i]}, max actuel={tableau[i_max]}") # debug if tableau[i] > tableau[i_max]: i_max = i print(f" → nouveau max trouvé à l'indice {i}") # debug return i_max
resultat = recherche_max([3, 7, 2, 9, 1])print(f"Indice du max : {resultat}")Sortie :
i=1, tableau[i]=7, max actuel=3 → nouveau max trouvé à l'indice 1 i=2, tableau[i]=2, max actuel=7 i=3, tableau[i]=9, max actuel=7 → nouveau max trouvé à l'indice 3 i=4, tableau[i]=1, max actuel=9Indice du max : 32.4 Technique 2 : le débogueur pas à pas
Section intitulée « 2.4 Technique 2 : le débogueur pas à pas »Un débogueur (debugger) permet d'exécuter un programme instruction par instruction et d'observer l'état des variables à chaque étape.
Dans Thonny :
- Placer des points d'arrêt (breakpoints) en cliquant dans la marge à côté d'une ligne
- Lancer le programme en mode débogage (Ctrl+F5 ou menu Exécuter → Déboguer)
- Utiliser les boutons :
- Pas à pas : exécuter l'instruction suivante
- Entrer : entrer dans une fonction
- Sortir : terminer la fonction en cours
- Continuer : reprendre l'exécution jusqu'au prochain point d'arrêt
Le débogueur affiche en temps réel les valeurs des variables dans un panneau dédié.
2.5 Technique 3 : diviser pour régner
Section intitulée « 2.5 Technique 3 : diviser pour régner »Quand un programme est long et que l'erreur est difficile à localiser :
- Tester chaque fonction séparément avec des assertions
- Commenter des portions de code pour isoler le problème
- Simplifier les données d'entrée (tester avec un petit tableau avant un grand)
# Tester une fonction isolémentdef somme(tableau): total = 0 for x in tableau: total += x return total
# Tests unitairesassert somme([]) == 0assert somme([5]) == 5assert somme([1, 2, 3]) == 6print("somme() fonctionne correctement")2.6 Bonnes pratiques
Section intitulée « 2.6 Bonnes pratiques »| Pratique | Pourquoi |
|---|---|
| Nommer clairement les variables | nombre_eleves plutôt que n ou x |
| Écrire des fonctions courtes | Plus faciles à tester et à déboguer |
| Tester souvent | Détecter les erreurs tôt, quand le code est encore frais |
| Lire les messages d'erreur | Python donne le type, la ligne et un message explicatif |
| Utiliser le débogueur | Plus efficace que des print() pour les erreurs complexes |
À retenir
Section intitulée « À retenir »- Un module est un fichier Python réutilisable contenant des fonctions et constantes.
- On importe avec
import module,from module import fonctionouimport module as alias. - La bibliothèque standard fournit
math,random,csv,os,json,doctest... help(module)etdir(module)permettent de consulter la documentation.if __name__ == "__main__":permet de séparer le code exécutable des tests.- Trois types d'erreurs : syntaxe (avant exécution), exécution (pendant), logique (résultat faux).
- Techniques de mise au point : affichages intermédiaires (
print), débogueur pas à pas (points d'arrêt), tests unitaires. - Lire le traceback de Python : il indique le fichier, la ligne et le type d'erreur.
© 2026 Corentin Dupont - LyCode
Créé avec Astro Starlight