Créer ta première fonction
Le problème du copier-coller
Imagine un programme de caisse qui calcule le prix TTC à dix endroits différents :
prix_ttc = round(prix * 1.1925)
# ... 50 lignes plus loin ...
total_ttc = round(total * 1.1925)
# ... et encore 8 fois ailleurs
Un jour, le taux de TVA change. Il faut retrouver les dix endroits, sans en oublier un. Si tu en oublies un, ton programme donne des résultats faux à certains endroits seulement. C'est un cauchemar.
Avec une fonction, le calcul de TVA est écrit à un seul endroit. Si le taux change, on modifie une ligne, et tout le programme est à jour.
Définir une fonction avec `def`
def saluer():
print("Bonjour !")
print("Bienvenue dans le parcours.")
Décortiquons :
def: le mot-clé pour définir une fonction (de l'anglais define) ;saluer: le nom de la fonction, avec les mêmes règles que les variables (minuscules,_entre les mots). Choisis un verbe : une fonction fait quelque chose ;(): les parenthèses, obligatoires (vides ici, on verra bientôt ce qu'on met dedans) ;:puis le corps de la fonction, indenté, comme pourifetfor.
def saluer():
print("Bonjour !")
saluer()
saluer()
Bonjour !
Bonjour !
Les paramètres : donner des informations à la fonction
Une fonction qui fait toujours exactement la même chose est limitée. On veut pouvoir lui transmettre des informations.
def saluer(prenom):
print(f"Bonjour {prenom} !")
saluer("Awa") # prenom vaut "Awa" pendant cet appel
saluer("Boris") # prenom vaut "Boris" pendant cet appel
Bonjour Awa !
Bonjour Boris !
À chaque appel, Python fait l'équivalent de prenom = "Awa" au début de la fonction, puis exécute le corps.
Plusieurs paramètres
On les sépare par des virgules. Les arguments sont rangés dans l'ordre :
def presenter(prenom, age):
print(f"{prenom} a {age} ans")
presenter("Awa", 20) # prenom = "Awa", age = 20
presenter(20, "Awa") # prenom = 20, age = "Awa" : l'ordre compte !
Si tu oublies un argument, Python le signale :
TypeError: presenter() missing 1 required positional argument: 'age'
« Il manque 1 argument obligatoire : age. »
Pratique : Définis une fonction dans la console
Dans la console, une fonction s'écrit sur une seule ligne quand son corps est court : def saluer(prenom): print(f"Bonjour {prenom}"). Dans l'éditeur, on l'écrira toujours sur plusieurs lignes.
Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer
Exercice : Ta première fonction
Définis une fonction saluer(prenom) qui affiche Bonjour suivi du prénom et d'un point d'exclamation, exactement : Bonjour Awa !
Puis appelle-la deux fois, avec "Awa" et avec "Boris".
Voir une solution
def saluer(prenom):
print(f"Bonjour {prenom} !")
saluer("Awa")
saluer("Boris")Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Une ligne de facture
Définis une fonction ligne_facture(article, quantite, prix) qui affiche une ligne au format :
3 x savon = 1500 FCFA
Appelle-la pour savon (3 à 500) et pour riz (2 à 1200).
Voir une solution
def ligne_facture(article, quantite, prix):
print(f"{quantite} x {article} = {quantite * prix} FCFA")
ligne_facture("savon", 3, 500)
ligne_facture("riz", 2, 1200)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Répare : deux erreurs de fonction
Ce programme contient deux erreurs typiques. Lis chaque message, corrige-les une par une.
Voir une solution
def print_table(n):
for i in range(1, 4):
print(f"{n} x {i} = {n * i}")
print_table(7)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Teste-toi
Qu'affiche ce programme ?
python def annoncer(): print("Attention") print("Début")
AttentionpuisDébut- Seulement
Début(bonne réponse) - Seulement
Attention - Rien
Définir une fonction n'exécute pas son corps. Il aurait fallu écrire annoncer() pour voir « Attention ».