ParcoursOuvrir l'appli

Créer ta première fonction

Python, les fonctions · 40 min

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 :

  1. def : le mot-clé pour définir une fonction (de l'anglais define) ;
  2. 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 ;
  3. () : les parenthèses, obligatoires (vides ici, on verra bientôt ce qu'on met dedans) ;
  4. : puis le corps de la fonction, indenté, comme pour if et for.
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")
  1. Attention puis Début
  2. Seulement Début (bonne réponse)
  3. Seulement Attention
  4. Rien

Définir une fonction n'exécute pas son corps. Il aurait fallu écrire annoncer() pour voir « Attention ».