Numérique et Sciences Informatiques1ère

Commentaires et documentation
Exercices corrigés

Maîtrisez les commentaires et la documentation : syntaxe, docstrings, documentation externe et bonnes pratiques grâce à ces 5 exercices détaillés.

Concepts & Exercices
Code + Documentation = Maintenance Facile
Principe fondamental
Commentaires
# Explique le code
Docstrings
"""Documentation"""
Style
PEP 257
📝
Exercice 1
Écrire des commentaires pertinents
Exercice 2
Créer des docstrings pour fonctions
Exercice 3
Documenter des classes
Exercice 4
Documenter un module
Exercice 5
Suivre les conventions PEP 257
Corrigé : Exercices 1 à 3
1 Commentaires pertinents
Définition :

Commentaire : Texte dans le code qui n'est pas exécuté mais sert à expliquer le fonctionnement du programme.

Méthode d'écriture :
  1. Utiliser le symbole # pour les commentaires simples
  2. Placer le commentaire sur la même ligne ou ligne précédente
  3. Expliquer le "pourquoi" plutôt que le "quoi"
  4. Écrire en français ou en anglais selon le contexte
  5. Restez concis mais clair
def trier_liste(liste): # Tri par sélection - algorithme quadratique O(n²) n = len(liste) for i in range(n): # Trouver l'index du plus petit élément min_idx = i for j in range(i+1, n): if liste[j] < liste[min_idx]: min_idx = j # Échanger l'élément minimum avec le premier élément non trié liste[i], liste[min_idx] = liste[min_idx], liste[i] return liste # Exemple d'utilisation donnees = [64, 34, 25, 12, 22, 11, 90] resultat = trier_liste(donnees.copy()) # Utilisation de copy() pour ne pas modifier l'original print(f"Données triées: {resultat}")
Type de commentaire Syntaxe Usage
Simple ligne # Commentaire Explication courte
Multi-ligne # Ligne 1
# Ligne 2
Explication détaillée
Bloc """...""" Docstrings
Étape 1 : Identifier les parties complexes

Expliquer les algorithmes ou les décisions de conception

Étape 2 : Expliquer le raisonnement

Justifier les choix techniques ou les solutions choisies

Étape 3 : Clarifier les intentions

Expliquer pourquoi certaines lignes de code existent

Réponse finale :

Commentaires pertinents qui expliquent le "pourquoi" et le "comment" du code

Règles appliquées :

Pertinence : Les commentaires doivent apporter de la valeur

Clarté : Écrire dans un langage simple et compréhensible

Maintenance : Mettre à jour les commentaires avec le code

2 Docstrings pour fonctions
Définition :

Docstring : Chaîne de caractères littérale placée en premier dans une fonction, classe ou module pour documenter ce composant.

def calculer_factorielle(n): """ Calcule la factorielle d'un nombre entier positif. Args: n (int): Le nombre entier pour lequel calculer la factorielle. Doit être >= 0. Returns: int: La factorielle de n (n!). Raises: ValueError: Si n est négatif. Examples: >>> calculer_factorielle(5) 120 >>> calculer_factorielle(0) 1 """ if n < 0: raise ValueError("n doit être un entier positif ou zéro") if n == 0 or n == 1: return 1 resultat = 1 for i in range(2, n + 1): resultat *= i return resultat def trier_et_filtrer(nombres, seuil): """ Trie une liste de nombres et ne garde que ceux supérieurs au seuil. Args: nombres (list): Liste de nombres à trier et filtrer seuil (float): Valeur minimale à garder dans le résultat Returns: list: Liste triée contenant seulement les nombres >= seuil """ nombres_filtres = [n for n in nombres if n >= seuil] return sorted(nombres_filtres)
Étape 1 : Décrire la fonction

Expliquer ce que fait la fonction en une phrase claire

Étape 2 : Documenter les paramètres

Indiquer le type et la signification de chaque paramètre avec Args

Étape 3 : Spécifier la valeur de retour

Décrire ce que la fonction renvoie avec Returns

Étape 4 : Mentionner les exceptions

Indiquer les erreurs potentielles avec Raises si applicable

Réponse finale :

Docstrings complets conformes aux conventions PEP 257

Règles appliquées :

Triple guillemets : Utiliser """ pour les docstrings

Formatage : Respecter la structure Args, Returns, Raises

Clarté : Écrire des descriptions claires et précises

3 Documentation de classes
Définition :

Documentation de classe : Ensemble de commentaires et docstrings décrivant le comportement, les attributs et les méthodes d'une classe.

class CompteBancaire: """ Représente un compte bancaire avec des opérations de base. Attributes: titulaire (str): Le nom du titulaire du compte solde (float): Le solde actuel du compte numero_compte (str): Numéro unique du compte """ def __init__(self, titulaire, numero_compte, solde_initial=0): """ Initialise un nouveau compte bancaire. Args: titulaire (str): Le nom du titulaire numero_compte (str): Numéro unique du compte solde_initial (float, optional): Solde initial. Defaults to 0. """ self.titulaire = titulaire self.numero_compte = numero_compte self.solde = solde_initial self._historique_operations = [] # Attribut privé def deposer(self, montant): """ Dépose un montant sur le compte. Args: montant (float): Montant à déposer (> 0) Returns: bool: True si l'opération a réussi, False sinon """ if montant <= 0: return False self.solde += montant self._historique_operations.append(f"Dépôt: +{montant}") return True def retirer(self, montant): """ Retire un montant du compte si le solde est suffisant. Args: montant (float): Montant à retirer (> 0) Returns: bool: True si l'opération a réussi, False sinon """ if montant <= 0 or montant > self.solde: return False self.solde -= montant self._historique_operations.append(f"Retrait: -{montant}") return True
Étape 1 : Documenter la classe

Expliquer le but et les responsabilités de la classe

Étape 2 : Lister les attributs

Décrire chaque attribut important de la classe

Étape 3 : Documenter chaque méthode

Fournir des docstrings pour toutes les méthodes publiques

Étape 4 : Expliquer les comportements

Détailler ce que font les méthodes et ce qu'elles retournent

Réponse finale :

Classe entièrement documentée avec docstrings pour tous les éléments publics

Règles appliquées :

Clarté : Expliquer le rôle de la classe et de ses méthodes

Complétude : Documenter tous les attributs et méthodes publics

Concision : Être clair sans être verbeux

Corrigé : Exercices 4 à 5
4 Documentation de module
Définition :

Documentation de module : Commentaires placés au début d'un fichier pour décrire son contenu et son usage.

\"\"\" Module de gestion des opérations mathématiques de base. Ce module fournit des fonctions pour effectuer des opérations arithmétiques de base et des conversions d'unités. Functions: addition(a, b): Retourne la somme de a et b soustraction(a, b): Retourne la différence entre a et b multiplication(a, b): Retourne le produit de a et b division(a, b): Retourne le quotient de a par b conversion_celsius_fahrenheit(celsius): Convertit Celsius en Fahrenheit conversion_fahrenheit_celsius(fahrenheit): Convertit Fahrenheit en Celsius Author: Nom de l'auteur Date: Date de création Version: 1.0.0 \"\"\" def addition(a, b): \"\"\" Additionne deux nombres. Args: a (float): Premier nombre b (float): Deuxième nombre Returns: float: Somme des deux nombres \"\"\" return a + b def division(a, b): \"\"\" Divise deux nombres. Args: a (float): Numérateur b (float): Dénominateur (ne doit pas être zéro) Returns: float: Quotient de a par b Raises: ZeroDivisionError: Si b est égal à zéro \"\"\" if b == 0: raise ZeroDivisionError("Division par zéro impossible") return a / b def conversion_celsius_fahrenheit(celsius): \"\"\" Convertit une température de Celsius en Fahrenheit. Args: celsius (float): Température en degrés Celsius Returns: float: Température en degrés Fahrenheit \"\"\" return (celsius * 9/5) + 32 # Fin du module
Étape 1 : Décrire le module

Expliquer le but et les fonctionnalités du module

Étape 2 : Lister les fonctions

Fournir une brève description de chaque fonction exportée

Étape 3 : Informations métadonnées

Inclure l'auteur, la date, la version et autres infos pertinentes

Étape 4 : Documentation interne

Chaque fonction du module doit avoir son propre docstring

Réponse finale :

Module entièrement documenté avec description générale et détails des fonctions

Règles appliquées :

Position : Docstring du module en première ligne du fichier

Contenu : Description du module, des fonctions et des métadonnées

Clarté : Information utile pour les utilisateurs du module

5 Conventions PEP 257
Définition :

PEP 257 : Norme Python pour la documentation des docstrings, définissant les conventions de style et de format.

def exemple_pep257(param1, param2=None): \"\"\" Une fonction exemple suivant PEP 257. Description détaillée de la fonction. Cette fonction fait quelque chose d'utile et suit les conventions PEP 257 pour la documentation. Args: param1 (str): Description du premier paramètre. param2 (int, optional): Description du deuxième paramètre. Defaults to None. Ce paramètre est optionnel. Returns: bool: True si l'opération réussit, False sinon. Raises: TypeError: Si param1 n'est pas une chaîne. ValueError: Si param2 est négatif. Examples: >>> exemple_pep257("test") True >>> exemple_pep257("test", 5) True \"\"\" if not isinstance(param1, str): raise TypeError("param1 doit être une chaîne") if param2 is not None and param2 < 0: raise ValueError("param2 ne doit pas être négatif") # Code de la fonction return True class ExempleClasse: \"\"\" Une classe exemple suivant PEP 257. Cette classe sert d'exemple pour montrer comment documenter correctement une classe selon les conventions PEP 257. Attributes: attribut_public (str): Un attribut public de la classe. _attribut_prive (int): Un attribut privé de la classe. \"\"\" def __init__(self, valeur): \"\"\" Initialise l'instance de la classe. Args: valeur (str): Valeur initiale pour l'attribut public. \"\"\" self.attribut_public = valeur self._attribut_prive = 0
Étape 1 : Respecter le format

Utiliser triple guillemets doubles pour les docstrings

Étape 2 : Structure cohérente

Suivre la structure Args, Returns, Raises, Examples

Étape 3 : Style approprié

Phrase impérative à la racine, description détaillée ensuite

Étape 4 : Cohérence

Appliquer les mêmes conventions dans tout le projet

Réponse finale :

Documentation conforme aux conventions PEP 257

Règles appliquées :

Triple guillemets : Toujours utiliser """

Structure : Args, Returns, Raises dans cet ordre

Phrases impératives : "Return" au lieu de "Returns"

Cours bien détaillé
Documentation = Maintenabilité + Lisibilité
Avantages principaux
🎯
Clarté : La documentation rend le code plus compréhensible.
📏
Maintenance : Facilite la modification et l'évolution du code.
📐
Collaboration : Permet aux autres développeurs de comprendre rapidement.
📝
Qualité : Code documenté est souvent code de meilleure qualité.
💡
Conseil : Documenter le code pendant sa rédaction, pas après
🔍
Attention : Garder les commentaires synchronisés avec le code
Astuce : Utiliser des outils d'auto-documentation comme Sphinx
📋
Méthode : Suivre les conventions PEP 8 et PEP 257
Vérification : Faire relire la documentation par un collègue
Bonnes pratiques :
  • Expliquer le "pourquoi" : Plutôt que le "quoi", expliquer la logique derrière le code
  • Soigner les docstrings : Ils sont essentiels pour la documentation automatique
  • Éviter les commentaires évidents : Ne pas commenter ce qui est évident
  • Utiliser des exemples : Montrer comment utiliser les fonctions avec des exemples
  • Restez concis : Être clair et bref sans sacrifier la précision
Principes de documentation :
  • La documentation doit être aussi importante que le code
  • Les docstrings doivent être en triple guillemets
  • Respecter les conventions PEP 257 pour la structure
  • Documenter les paramètres, les valeurs de retour et les exceptions
  • Utiliser un langage clair et accessible
Args
Paramètres de la fonction
Returns
Valeur de retour
Raises
Exceptions levées
Commentaires et documentation Structure du code