Pourquoi faire des fonctions ?
Don't repeat yourself
L'un des grands principes de la programmation, c'est le fait de ne pas se répéter inutilement. Ce principe en anglais est explicité par l'acronyme DRY (don't repeat yoursel). Et l'un des outils pour cela est celui des fonctions.
Première version
Imaginons le problème suivant : je souhaite calculer la somme des nombres entiers de 1 à 10. Pn peut réaliser le calcul de la façon suivante :
resultat = 0
nombre = 1
while nombre <= 10 :
resultat += nombre
nombre += 1
print ("la somme des nombres de 1 à 10 est : ", resultat)
On se répète un peu...
Imaginons maintenant que l'on souhaite faire aussi la somme des entiers de 12 à 24. L'approche la plus courante chez les programmeurs débutants est de faire un copier-coller du code précédent en remplaçant 1 par 12 et 10 par 24. Le code est alors redondant
resultat = 0
nombre = 1
while nombre <= 10 :
resultat += nombre
nombre += 1
print ("la somme des nombres de 1 à 10 est : ", resultat)
resultat = 0
nombre = 12
while nombre <= 24 :
resultat += nombre
nombre += 1
print ("la somme des nombres de 12 à 24 est : ", resultat)
On se répète encore ?
Imaginons maintenant que l'on souhaite en plus faire la somme des entiers de 1 à 15. Si on répète le code ci dessus, cela devient un peu lourd ...
resultat = 0
nombre = 1
while nombre <= 10 :
resultat += nombre
nombre += 1
print ("la somme des nombres de 1 à 10 est : ", resultat)
resultat = 0
nombre = 12
while nombre <= 24 :
resultat += nombre
nombre += 1
print ("la somme des nombres de 12 à 24 est : ", resultat)
resultat = 0
nombre = 1
while nombre <= 15 :
resultat += nombre
nombre += 1
print ("la somme des nombres de 1 à 15 est : ", resultat)
La notion de fonction
Le bloc qui nous permet de faire le calcul de la somme des nombres est toujours le même. Pour ne pas se répéter, nous allons rendre cette partie du code unique et réutilisable grâce aux fonctions.
Définir une fonction
Une fonction en python est un bout de code réutilisable, qui permet d'effectuer des opérations qui peuvent dépendre de paramètres. En ce sens, elles ressemblent beaucoup aux fonctions vues au lycée en mathématiques.
Pour créer notre fonction, nous utilisons le mot clef def
suivi du nom de la fonction.
Viennent ensuite des parenthèses et à l'intérieur de ces parenthèses les éventuels paramètres que nous
utiliserons. Enfin, au bout de la ligne, il y a un :
qui indique que ce qui vient après est
le code qui sera exécuté.
def somme_entiers(debut,fin) :
Les instructions qui seront exécutées lorsque la fonction est appelée sont décalées. En Python, c'est ce décalage (l'indentation) qui indique la structure du programme. Ici, nous mettons le code commun
def somme_entiers(debut,fin) :
resultat = 0
nombre = debut
while nombre <= fin :
resultat += nombre
nombre += 1
Notre fonction, lorsqu'elle est appelée, effectue le calcul. Mais ensuite ? Pour l'instant, le résultat est perdu dans la nature...
Nous allons le retourner au programme principal qui a appelé la fonction grâce au mot clef return
def somme_entiers(debut,fin) :
resultat = 0
nombre = debut
while nombre <= fin :
resultat += nombre
nombre += 1
return resultat
Utiliser la fonction
Vous avez essayé le programme précédent ? Il ne se passe rien ? C'est normal. Nous avons défini la fonction, c'est à dire une suite d'action à effectuer. Mais nous n'avons pas utilisé cette fonction. Pour avoir l'équivalent de notre code précédent, il faudra appeler 3 fois cette fonction:
def somme_entiers(debut,fin) :
resultat = 0
nombre = debut
while nombre <= fin :
resultat += nombre
nombre += 1
return resultat
s = somme_entiers(1,10)
print("La somme des entiers de 1 à 10 est : ", s)
s = somme_entiers(12,24)
print("La somme des entiers de 12 à 24 est : ", s)
s = somme_entiers(1,15)
print("La somme des entiers de 1 à 15 est : ", s)
Paramètres indéterminés
Mieux encore, les paramètres peuvent ne pas être déterminés à l'avance. Le code ci dessous va demander le nombre de début et le nombre de fin à l'utilisateur, et lui affiche la somme des entiers entre ces deux nombres. Puis le programme recommencera tant que l'utilisateur lui demandera
def somme_entiers(debut,fin) :
resultat = 0
nombre = debut
while nombre <= fin :
resultat += nombre
nombre += 1
return resultat
reponse = "o"
while reponse == "o":
a = int(input("Quel est le premier nombre ? "))
b = int(input("quel est le dernier nombre ? "))
print("la somme des entiers de ",a," à ",b," est ",somme_entiers(a,b))
reponse = input("Voulez vous continuer (o pour continuer)? ")
Exercices
À faire
Vous allez réaliser une fonction qui s'appelle aire_rectangle, qui prend en paramètres deux nombres positifs qui représentent la longueur et la largeur d'un rectangle et qui retourne l'aire du rectangle
À faire
Vous allez réaliser une fonction qui s'appelle motif_etoile
qui prendra en entrée un nombre entier n
et qui renverra la chaine qui contient n fois le symbole
*
si n est pair, et n fois le symbole +
si n est impair.
Par exemple, si on appelle motif_etoile(2)
,la chaine de caractère retournée sera "**"
. Et
motif_etoile(5)
,la chaine de caractère retournée sera "+++++"
La fonction sera appelée avec une boucle prédéfinie pour dessiner un motif
En résumé
À retenir
- Une fonction est un bloc de code python
-
introduit par le mot clef
def
- qui porte un nom
- qui peut avoir des paramètres
- qui peut renvoyer une valeur
def somme_entiers(debut,fin) :
resultat = 0
nombre = debut
while nombre <= fin :
resultat += nombre
nombre += 1
return resultat
À savoir
Remarquez la différence entre paramètres et arguments. Les paramètres d'une fonction sont les noms listés dans la définition de la fonction. Les arguments d'une fonction sont les valeurs réelles passées à la fonction. Les paramètres sont initialisés avec les valeurs des arguments fournis.