Transmettre des données aux fonctions
Objectif : Faire calculer un sous-total à une fonction recevant une liste de dépenses.
Une fonction d’affichage peut déjà parcourir des dépenses, mais elle ne peut traiter qu’une liste écrite directement dans son corps. Pour la réutiliser avec d’autres données, vous devez lui transmettre cette liste au moment de l’appel.
Vous allez faire évoluer afficher_depenses() pour qu’elle reçoive une liste et une devise. Elle parcourra les dépenses, affichera leurs détails et calculera leur sous-total. Comme la notion de résultat renvoyé sera étudiée dans la prochaine leçon, la fonction affichera le sous-total au lieu de le transmettre à une autre partie du programme.
Transmettre la liste à une fonction
Dans une définition de fonction, un paramètre est un nom qui représente une donnée attendue. Ici, liste_depenses représente la liste que la fonction traitera. Lors de l’appel, vous placez une valeur entre les parenthèses : cette valeur est l’argument transmis au paramètre.
Le fichier complet ci-dessous conserve une liste de trois dépenses structurées et le parcours simulé de commandes vu précédemment. La fonction reçoit la liste en premier paramètre et la devise en second. Le paramètre devise possède une valeur par défaut : si vous ne lui transmettez pas d’argument, la fonction utilise automatiquement « € ».
print("Suivi de dépenses")
# Présentation du fonctionnement du script.
montant = 12.5
categorie = "Transport"
print(f"Exemple : {montant:.2f} € en {categorie}.")
montants = [12.5, 8.0, 24.75]
montants.append(6.25)
print(f"Nombre de montants enregistrés : {len(montants)}")
premiere_depense = {
"montant": 12.5,
"categorie": "Transport",
"description": "Ticket de bus",
}
premiere_depense["description"] = "Ticket de bus aller"
if premiere_depense["montant"] > 10 and premiere_depense["categorie"] == "Transport":
classement = "Dépense à surveiller"
elif premiere_depense["montant"] > 5 or premiere_depense["categorie"] == "Transport":
classement = "Dépense courante"
else:
classement = "Petite dépense"
print(classement)
liste_depenses = [
{"montant": 12.5, "categorie": "Transport", "description": "Ticket de bus"},
{"montant": 8.0, "categorie": "Alimentation", "description": "Déjeuner"},
{"montant": 24.75, "categorie": "Logement", "description": "Fournitures"},
]
commandes = ["continuer", "continuer", "arreter"]
index_commande = 0
while index_commande < len(commandes):
commande = commandes[index_commande]
if commande == "arreter":
print("Arrêt du parcours simulé.")
break
print(f"Commande traitée : {commande}")
index_commande += 1
def afficher_depenses(liste_depenses, devise="€"):
sous_total = 0
for depense in liste_depenses:
montant_depense = depense["montant"]
sous_total += montant_depense
print(
f"{depense['description']} — {depense['categorie']} : "
f"{montant_depense:.2f} {devise}"
)
print(f"Sous-total : {sous_total:.2f} {devise}")
afficher_depenses(liste_depenses)
print("Sous-total affiché dans la devise demandée :")
afficher_depenses(liste_depenses, "EUR")Suivi de dépenses
Exemple : 12.50 € en Transport.
Nombre de montants enregistrés : 4
Dépense à surveiller
Commande traitée : continuer
Commande traitée : continuer
Arrêt du parcours simulé.
Ticket de bus — Transport : 12.50 €
Déjeuner — Alimentation : 8.00 €
Fournitures — Logement : 24.75 €
Sous-total : 45.25 €
Sous-total affiché dans la devise demandée :
Ticket de bus — Transport : 12.50 EUR
Déjeuner — Alimentation : 8.00 EUR
Fournitures — Logement : 24.75 EUR
Sous-total : 45.25 EURLes deux appels transmettent le même argument, liste_depenses, au paramètre liste_depenses. Dans le premier, aucun deuxième argument n’est fourni : la valeur par défaut « € » est utilisée. Dans le second, l’argument "EUR" remplace cette valeur par défaut pour cet appel.
Calculer et afficher un sous-total
À chaque passage dans la boucle for, le montant de la dépense courante est ajouté à sous_total. La fonction affiche ensuite ce cumul au format avec deux décimales. Pour les trois montants de l’exemple, le résultat obtenu est 45.25 €.
La fonction comporte moins de vingt lignes et traite la liste reçue sans dépendre du nom d’une variable particulière définie ailleurs dans le script. Vous pouvez donc l’appeler avec une autre liste de dépenses, à condition que chaque élément contienne les clés montant, categorie et description. La précédente leçon a présenté les boucles et les listes ; vous réutilisez ici ces notions pour alimenter une fonction.
À retenir
- Un paramètre est le nom prévu dans la définition de la fonction pour recevoir une donnée.
- Un argument est la valeur transmise à ce paramètre lors de l’appel.
- Un paramètre par défaut peut être omis lors de l’appel, comme la devise « € ».
- Une fonction peut parcourir une liste reçue et afficher un sous-total calculé à partir de ses dépenses.
Dans la prochaine leçon, vous verrez comment transmettre un résultat calculé par une fonction au reste du programme.