Exercices sur les fonctions¶
Voici quelques exercices portant sur les fonctions en Python.
Exercice 1
Téléchargez le fichier suivant et ouvrez-le dans Thonny :
exo1_fonctions.py
Complétez les fonctions est_pair
, plus_grand
et produit
en respectant la documentation (voir explications sur les docstrings plus bas).
Voici quelques exemples d'appels à ces fonctions dans la console :
>>> est_pair(12)
True
>>> est_pair(15)
False
>>> plus_grand(5, 8, 3)
8
>>> plus_grand(7, 7, 7)
7
>>> produit(4, 8)
32
Les docstrings
Pour comprendre ce que doivent renvoyer ces fonctions, et quels sont leurs paramètres, lisez leurs documentations. Les documentations des fonctions sont écrites sous la forme de commentaires multilignes, que l'on appelle des docstrings. Par exemple, voici la docstring de la fonction est_pair
:
''' Renvoie True si l'entier positif n est pair, False sinon.
:param n: (int) un entier positif
:return: (bool) True ou False '''
Cette docstring indique que la fonction doit renvoyer un booléen, True
ou False
, selon si la paramètre n
(un entier) est pair ou non.
À noter qu'il n'y a pas vraiment de convention sur la manière d'écrire une docstring. Toutefois, il doit au minimum y figurer :
- ce que fait la fonction,
- les paramètres d'entrée et leur type,
- la valeur de retour et son type.
Correction - Exercice 1
La fonction est_pair
peut être écrite naïvement de la manière suivante :
def est_pair(n):
''' Renvoie True si l'entier positif n est pair, False sinon.
:param n: (int) un entier positif
:return: (bool) True ou False '''
if n % 2 == 0:
return True
else:
return False
Cependant, on peut l'écrire plus simplement de la manière suivante :
def est_pair(n):
''' Renvoie True si l'entier positif n est pair, False sinon.
:param n: (int) un entier positif
:return: (bool) True ou False '''
return n % 2 == 0
En effet, Python va d'abord évaluer l'expression n % 2 == 0
, qui sera évaluée à True
ou à False
, et cette valeur sera renvoyée par le return
.
La fonction plus_grand
peut être écrite avec une suite d'instructions de branchement if... elif... else
, en combinant plusieurs tests à l'aide de l'opérateur and
:
def plus_grand(a, b, c):
''' Renvoie la plus grande valeur parmi les trois entiers donnés en entrée.
:param a: (int) un entier
:param b: (int) un entier
:param c: (int) un entier
:return: (int) le plus grand des trois entiers '''
if a >= b and a >= c: # si a est plus grand que b et plus grand que c
return a # renvoyer a
elif b >= a and b >= c: # si b est plus grand que a et plus grand que c
return b # renvoyer b
else: # sinon
return c # renvoyer c
Enfin, la fonction produit
peut être écrite en transformant le produit en somme. On utilisera pour cela une boucle for
:
def produit(x, y):
''' Effectue le produit entre x et y SANS UTILISER LE SYMBOLE *.
:param x: (int) un entier positif
:param y: (int) un autre entier positif
:return: (int) résultat du produit des deux entiers '''
somme = 0 # initialiser la variable qui contiendra le résultat
for i in range(y): # itérer y fois
somme += x # ajouter x à la somme
return somme # renvoyer la somme des x
Exercice 2
Dans un nouveau script Python, écrire une fonction compter_voyelles
qui reçoit une chaîne de caractères mot
en entrée et renvoie le nombre de voyelles ("a", "e", "i", "o", "u", "y") présentes dans ce mot.
Exemple :
Ensuite, en-dessous de la fonction, écrire un programme qui demande à l'utilisateur de saisir un mot, puis afficher le nombre de voyelles de ce mot en faisant appel à compter_voyelles
.
Correction - Exercice 2
Pour compter le nombre de voyelles, il faut parcourir chaque caractère du mot donné en entrée et incrémenter un compteur à chaque fois qu'une voyelle est trouvée.
def compter_voyelles(mot):
''' Renvoie ne nombre de voyelles du mot donné en entrée.
:param mot: (str) un mot
:return: (int) le nombre de voyelles du mot '''
compteur = 0 # initialiser un compteur à 0
for lettre in mot: # pour chaque lettre du mot
if lettre in "aeiouy": # si la lettre est dans la chaîne "aeiouy"
compteur += 1 # incrémenter le compteur (augmenter de 1)
return compteur # renvoyer le compteur
Ensuite, on crée un programme qui demande à l'utilisateur de saisir un mot et qui affiche le nombre de voyelles de ce mot :
Exercice 3
Écrire une fonction factorielle
qui reçoit un nombre entier nombre
en entrée et renvoie la factorielle de ce nombre. Cliquez ici pour un rappel de ce qu'est une factorielle.
Exemple :
Ensuite, en-dessous de la fonction, écrire un programme qui demande à l'utilisateur de saisir un nombre entier, puis qui affiche la factorielle de ce nombre en appelant factorielle
.
Correction - Exercice 3
On peut écrire la fonction factorielle
de la manière suivante :
def factorielle(n):
''' Renvoie la factorielle d'un nombre n donné en entrée.
:param n: (int) un entier positif ou nul
:return: (int) la factorielle du nombre n '''
res = 1 # initialiser la variable qui contiendra le résultat
for i in range(1, n+1): # i prendra chaque valeur de 1 jusqu'à n
res = res * i # ou res *= i, multiplier res par la valeur de i courante
return res # renvoyer le résultat
Enfin, on écrit un programme qui demande à l'utilisateur de saisir un nombre entier, et appelle factorielle
pour calculer la factorielle de ce nombre.
Exercice 4
Écrire une fonction trouver_le_nombre
, qui prend un entier nombre
entre 1
et 100
en entrée, et qui :
- demande à l'utilisateur de saisir un nombre entre 1 et 100,
- si le nombre saisi correspond au nombre généré :
- on affiche
"Gagné !"
et on renvoieTrue
(et donc la fonction s'arrête),
- on affiche
- sinon :
- si le nombre à trouver
nombre
est plus petit que le nombre saisi :- on affiche
"Perdu, c'est moins..."
et on renvoieFalse
.
- on affiche
- sinon :
- on affiche
"Perdu, c'est plus..."
et on renvoieFalse
.
- on affiche
- si le nombre à trouver
On souhaite ensuite écrire un programme réutilisant trouver_le_nombre
qui :
- génère un nombre aléatoire à l'aide de
randint
, - initialise une variable
trouve
àFalse
, - effectue une boucle de 5 itérations, dans laquelle :
- si
trouve
est égal àFalse
, on appelletrouver_le_nombre
pour demander à l'utilisateur de saisir un nombre, et :- si la valeur renvoyée par
trouver_le_nombre
vautTrue
, on affecteTrue
àtrouve
. - sinon, on ne fait rien.
- si la valeur renvoyée par
- si
Voici le squelette de ce programme, vous pouvez le copier/coller et remplacer les pointillés par le code approprié :