Organiser les responsabilités
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.
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()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 EURComprendre 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.