Leçon 16 / 20

Organiser les responsabilités

12 min Python — bases du langage Gratuit

Objectif : Répartir un script de dépenses entre des fonctions aux rôles distincts.

Un script qui affiche les dépenses, calcule leur total et pilote les appels peut rapidement devenir difficile à modifier. En séparant ces rôles, vous savez où intervenir sans mélanger l’affichage et le déroulement du programme. Vous allez organiser suivi_depenses.py autour d’une fonction de traitement et d’un point d’entrée.

Séparer les responsabilités

Une responsabilité correspond à un rôle précis dans le programme. Ici, afficher_depenses() reçoit une liste, présente ses éléments et renvoie le sous-total, comme dans la leçon précédente. La fonction main() organise les étapes : elle appelle le traitement, récupère son résultat et décide de l’afficher.

Remplacez le contenu de suivi_depenses.py par ce fichier complet. Il reprend trois dépenses structurées, conserve les deux appels avec les devises € et EUR, et rassemble le déroulement dans main(). Chaque fonction reste courte et tient ainsi compte de la convention du projet.

Texte
depenses = [
    {"montant": 12.5, "categorie": "Repas", "description": "Déjeuner"},
    {"montant": 8.0, "categorie": "Transport", "description": "Bus"},
    {"montant": 24.9, "categorie": "Courses", "description": "Épicerie"},
]


def afficher_depenses(liste_depenses, devise="€"):
    sous_total = 0
    for depense in liste_depenses:
        montant = depense["montant"]
        sous_total += montant
        print(f"{depense['description']} — {montant:.2f} {devise}")
    print(f"Sous-total : {sous_total:.2f} {devise}")
    return sous_total


def main():
    total_euros = afficher_depenses(depenses)
    print(f"Total réutilisé : {total_euros:.2f} €")
    total_eur = afficher_depenses(depenses, "EUR")
    print(f"Total réutilisé : {total_eur:.2f} EUR")


if __name__ == "__main__":
    main()
Résultat attendu
Déjeuner — 12.50 €
Bus — 8.00 €
Épicerie — 24.90 €
Sous-total : 45.40 €
Total réutilisé : 45.40 €
Déjeuner — 12.50 EUR
Bus — 8.00 EUR
Épicerie — 24.90 EUR
Sous-total : 45.40 EUR
Total réutilisé : 45.40 EUR

Comprendre le rôle de main()

La fonction main() sert de chef d’orchestre : elle indique dans quel ordre utiliser les autres fonctions, sans prendre en charge les détails de leur travail. La condition finale vérifie si le fichier est lancé directement. Dans ce cas, main() est appelée ; si le fichier est importé par un autre programme, le déroulement principal ne démarre pas automatiquement.

Les noms sous_total et montant sont créés dans afficher_depenses() : ils sont locaux à cette fonction. De même, total_euros et total_eur appartiennent à main(). Pour faire passer un résultat d’une fonction à une autre partie du programme, récupérez-le avec l’appel et transmettez-le explicitement, plutôt que de compter sur une variable créée ailleurs.

À retenir

  • Attribuez à chaque fonction une responsabilité claire.
  • Utilisez main() pour coordonner les appels et le déroulement du script.
  • Une variable créée dans une fonction est locale à cette fonction.
  • Transmettez les données et résultats explicitement entre les fonctions.

Dans la prochaine leçon, vous définirez le comportement attendu du suivi de dépenses avant d’ajouter la saisie et l’export.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.