Fonctions#
Qu'est-ce qu'une fonction ?#
Dans un programme, certains blocs d'instructions doivent être réutilisés à plusieurs endroits. On peut par exemple imaginer une dizaine d'instructions permettant de vérifier qu'un mot de passe est suffisamment robuste (au moins 12 caractères, une majuscule, un caractère spécial, etc.). Ces instructions devront non seulement être utilisées lors de l'inscription d'un nouvel utilisateur, mais également lors du changement de mot de passe.
On pourrait simplement copier/coller ces dix lignes à ces deux endroits du programme. Dès lors, le programme pourrait être représenté avec le schéma ci-dessous, dans lequel les cases bleues représente le même code dupliqué à deux endroits différents.

Toutefois, recopier les mêmes instructions plusieurs fois vient avec des désavantages
Si le code doit être modifié, il faudra aller le changer partout où il a été copié/collé
Du point de vue d'un programmeur qui découvre le code, il n'est pas clair au 1er coup d'oeil que ces lignes copiées/collées sont les mêmes et qu'elles doivent le rester
Pour ce même programmeur, l'utilité de ces lignes n'est non plus pas directement clair. Il devra lire ces lignes pour les analyser et les comprendre.
Pour pallier à ces problèmes, le code utilisé 2x ne doit pas être copié/collé, mais déplacé "en marge" du programme principale dans une fonction. Lorsque, dans notre programme, on souhaite utiliser ces instructions mises en marge, on ne fait alors qu'un appel à cette fonction. Le programme ressemblera dès lors à cela :

Avec cela, lorsqu'on modifie une fois le code à réutiliser, la modification impactera tous les appels de fonction. De plus, le nom de la fonction (ici F
) devrait être significatif et nommer l'action effectuée par la fonction. Dans l'exemple de la vérification de sécurité du mot de passe, la fonction aurait pu avoir comme nom vérifie_sécurité_mdp
. Ainsi, avec une fonction, le programme devient plus lisible et est plus facilement modifiable.
Définir une fonction#
Les fonctions se définissent en général dans un fichier distinct, ou, pour ce cours, au début du code. Le mot-clef permettant de définir une fonction est def
. Celui-ci est suivi du nom de la fonction puis d'une paire de parenthèse (vide pour l'instant) et de deux-points. Les instructions indentées sous la définition constituent corps de la fonction, c'est-à-dire le bloc d'instructions à exécuter lorsque la fonction est appelée.
Dans l'exemple ci-dessous, on définit une fonction nommée affiche_salutations
dont le corps affiche simplement 2 textes.
1def affiche_salutations():
2 print("Bonjour")
3 print("Comment allez-vous ?")
Lorsqu'on exécute ce code, rien ne se passe. En effet, ici la fonction affiche_salutations
a été définie, mais jamais appelée. Pour appeler une fonction, on écrit simplement son nom suivi d'une paire de parenthèses. Dans l'exemple ci-dessous, la fonction est appelée 2x à différents endroits du programme
1def affiche_salutations():
2 print("Bonjour")
3 print("Comment allez-vous ?")
4
5print("Début du programme")
6affiche_salutations()
7print("Pouvez-vous répéter svp, je n'ai pas compris")
8affiche_salutations()
Fonction avec paramètres#
Les fonctions peuvent être paramétrées. C'est-à-dire que leur exécution va dépendre de valeurs qui seront précisées au moment de l'appel. Par exemple, une fonction calcul_et_affiche_aire_triangle
doit pouvoir être par paramétrée par la base et la hauteur du triangle. Ces paramètres se placent entre les parenthèses de la définition de la fonction et sont séparés par une virgule. Ils peuvent ensuite être réutilisés dans le corps de la fonction.
1def calcul_et_affiche_aire_triangle(base, hauteur):
2 aire = base * hauteur / 2
3 print("L'aire d'un triangle de", base, "de base et", hauteur, "de hauteur est de", aire)
On peut maintenant appeler cette fonction en précisant obligatoirement les valeurs des paramètres entre les parenthèses.
1def calcul_et_affiche_aire_triangle(base, hauteur):
2 aire = base * hauteur / 2
3 print("L'aire d'un triangle de", base, "de base et", hauteur, "de hauteur est de", aire)
4
5calcul_et_affiche_aire_triangle(10, 20)
6calcul_et_affiche_aire_triangle(20, 10)
7calcul_et_affiche_aire_triangle(35, 54)
Exercices#
Exercice 40#
Le code ci-dessous définit 3 fonctions. Il contient également un petit programme demandant à l'utilisateur son humeur de 1 à 10 (10 étant la meilleure humeur possible). Complétez le programme uniquement en appelant les fonctions adéquates.
def affiche_content():
print("😊")
def affiche_neutre():
print("😐")
def affiche_triste():
print("😢")
humeur = int(input("De 1 à 10, comment vas-tu ?"))
if humeur < 3:
elif humeur < 6:
else:
Solution
1def affiche_content():
2 print("😊")
3def affiche_neutre():
4 print("😐")
5def affiche_triste():
6 print("😢")
7
8humeur = int(input("De 1 à 10, comment vas-tu ?"))
9
10if humeur < 3:
11 affiche_content()
12elif humeur < 6:
13 affiche_neutre()
14else:
15 affiche_triste()
Exercice 41#
Le programme ci-dessous appelle 2 fonctions qui n'existent pas. Définissez les et complétez leur corps avec un texte approprié de manière que le programme fonctionne correctement
#Définissez vos fonctions ici
compteur = 10
print("Bombe amorcée !")
while compteur > 0:
compteur -= 1
tic_tac()
explosion()
Solution
1def tic_tac():
2 print("TIC TAC")
3def explosion():
4 print("BOOM")
5
6compteur = 10
7print("Bombe amorcée !")
8while compteur > 0:
9 compteur -= 1
10 tic_tac()
11explosion()
Exercice 42#
Définissez une fonction nommée calcule_et_affiche_aire_cercle
, paramétrée par le rayon \(r\) du cercle. L'aire peut être calculée par le formule \(\pi \cdot r^2\). Utilisez la valeur 3.14
pour \(\pi\). Appelez ensuite la fonction pour afficher l'aire de cercles de 3, 10 et 80 de rayon.
#Ecrivez votre code ici
Solution
1def calcule_et_affiche_aire_cercle(rayon):
2 aire = 3.14 * rayon ** 2
3 print("L'aire est de", aire)
4
5calcule_et_affiche_aire_cercle(3)
6calcule_et_affiche_aire_cercle(10)
7calcule_et_affiche_aire_cercle(80)
Exercice 43#
Définissez une fonction nommée affiche_prévision_météo
paramétrée par une température (en °C) et une pression (en hPa). En fonction de ces deux paramètres, le corps de la fonction affichera différents texte :
Si la température est supérieure à 25 et que la pression est supérieure à 1015 :
Grand ciel bleu
.Si la température est inférieure ou égale à 0 :
Froid glacial
.Si la pression est inférieure à 1000 ou que la température est supérieure à 30 :
Temps orageux
.Dans les autres cas :
Météo changeante
.
Appelez finalement cette fonction pour afficher les prévisions pour un température de 27°C une pression de 1011 hPa, puis pour 15°C et 990 hPa
#Ecrivez votre code ici
Solution
1def affiche_prévision_météo(temperature, pression):
2 if temperature > 25 and pression > 1015:
3 print("Grand ciel bleu")
4 elif temperature <= 0:
5 print("Froid glacial")
6 elif pression < 1000 or temperature > 30:
7 print("Temps orageux")
8 else:
9 print("Météo changeante")
10
11affiche_prévision_météo(27, 1011)
12affiche_prévision_météo(15, 990)
Exercice 44#
La fonction affiche_livret
définie ci-dessous permet d'afficher le livret de multiplication du nombre donné en paramètre. Sans toucher au corps de cette fonction, et en ne l'appelant qu'une seule fois, complétez le programme de manière à afficher tous les livrets de multiplication de 2 à 10.
def affiche_livret(n):
print("Affichage du livret de", n)
i = 2
while i <= 10:
print(i, "x", n, "=", i*n)
i += 1
#Complétez le programme ici
Solution
1def affiche_livret(n):
2 print("Affichage du livret de", n)
3 i = 2
4 while i <= 10:
5 print(i, "x", n, "=", i*n)
6 i += 1
7
8multiple = 2
9while multiple <= 10:
10 affiche_livret(multiple)
11 multiple += 1
Exercice 45#
Définissez une fonction quiz
prenant en paramètre une question et sa réponse correcte pour compléter le programme ci-dessous. Le corps de la fonction doit poser cette question à l'utilisateur pour obtenir une réponse (avec la fonction input
). Puis, cette réponse doit être vérifiée en la comparant à la réponse correcte donnée en paramètre. Si celle-ci est correcte, le texte Correct
est affiché. Sinon, on affiche Mauvaise réponse
.
#Définissez la fonction ici
quiz("Quel est le meilleur collège de Suisse ?", "STX")
quiz("Quelle est la capitale du Groenland ?", "Nuuk")
quiz("Qui a été élu président des USA en 2016 ?", "Trump")
Solution
1def quiz(question, reponse_correcte):
2 reponse_utilisateur = input(question)
3 if reponse_utilisateur == reponse_correcte:
4 print("Correct")
5 else:
6 print("Mauvaise réponse")
7
8quiz("Quel est le meilleur collège de Suisse ?", "STX")
9quiz("Quelle est la capitale du Groenland ?", "Nuuk")
10quiz("Qui a été élu président des USA en 2016 ?", "Trump")