Fonctions et simulations : définir et appeler une fonction avec ou sans arguments
Fonctions et simulations : définir et appeler une fonction, avec ou sans arguments
En Python, une fonction est une petite machine à laquelle on donne un nom avec def : on l'écrit une fois, puis on l'appelle autant de fois qu'on veut, en lui donnant éventuellement des valeurs (les arguments) et en récupérant un résultat avec return.
Objectifs
- Définir une fonction en Python avec
def, avec ou sans paramètres. - Appeler une fonction en lui passant des arguments et utiliser la valeur renvoyée.
- Distinguer
return(renvoyer une valeur) etprint(afficher). - Faire le lien avec les fonctions mathématiques \(x\mapsto f(x)\).
- Utiliser des fonctions pour une simulation simple (lancer de dé).
1. Qu'est-ce qu'une fonction ?
Une fonction est un bloc d'instructions auquel on donne un nom. On distingue deux moments :
- la définition : on écrit ce que fait la fonction (on construit la machine) ;
- l'appel : on demande à la fonction de travailler (on fait marcher la machine).
Syntaxe de la définition :
def nom_de_la_fonction(parametre1, parametre2):
instructions
return resultat
defannonce la définition ; la ligne se termine par deux-points:.- Les instructions de la fonction sont indentées (décalées de 4 espaces).
- Les paramètres sont les noms des entrées, entre parenthèses.
returnrenvoie le résultat et termine la fonction.
flowchart LR A[Appel avec des arguments] --> B[Parametres recoivent les valeurs] B --> C[Instructions executees] C --> D[return renvoie le resultat] D --> E[Suite du programme]
Quel mot-clé sert à définir une fonction en Python ?
2. Fonction avec arguments
def prix_pains(n):
return 150 * n
total = prix_pains(4)
print(total)
nest le paramètre : un nom dans la définition.4est l'argument : la valeur donnée au moment de l'appel. Pendant cet appel,nvaut 4.- La fonction renvoie \(150\times 4=600\) ; cette valeur est rangée dans
total, puis affichée :600.
Le lien avec les fonctions en mathématiques
La fonction mathématique \(f : x\mapsto x^2-3x+1\) s'écrit en Python :
def f(x):
return x**2 - 3*x + 1
L'appel f(4) calcule l'image de \(4\) : \(f(4)=4^2-3\times 4+1=16-12+1=5\).
Plusieurs arguments
Une fonction peut recevoir plusieurs arguments, séparés par des virgules. L'ordre compte : le premier argument va dans le premier paramètre, et ainsi de suite.
def prix_apres_remise(prix, taux):
return prix * (1 - taux / 100)
Exemple résolu
Une chemise à 5 000 F CFA est soldée à 20 %. Que renvoie prix_apres_remise(5000, 20) ? Cherche d'abord, puis suis l'exécution pas à pas.
prix reçoit 5000 et taux reçoit 20 (même ordre que dans la définition).4000.0 (un nombre décimal, à cause de la division).prix_apres_remise(20, 5000), on aurait obtenu \(20\times(1-50)=-980\) : un résultat absurde, car les arguments sont inversés.On définit def double(x): return 2*x. Qu'affiche print(double(7) + 1) ?
3. Fonction sans argument
def saluer():
print("Bonjour Awa, bon courage pour le devoir !")
saluer()
saluer()
Ce programme affiche deux fois le message. Les parenthèses vides sont obligatoires, dans la définition comme dans l'appel.
Une fonction sans argument peut aussi renvoyer une valeur. C'est le cas pour simuler un dé :
from random import randint
def lancer_de():
return randint(1, 6)
randint(1, 6) renvoie un entier au hasard entre 1 et 6 (inclus). Chaque appel lancer_de() donne un nouveau résultat.
Comment appelle-t-on correctement la fonction lancer_de ?
4. Renvoyer ou afficher : return et print
returnrenvoie une valeur au programme qui a appelé la fonction : on peut la stocker dans une variable, la réutiliser dans un calcul. Aprèsreturn, la fonction s'arrête.printaffiche seulement à l'écran ; la valeur n'est pas récupérable. Une fonction sansreturnrenvoie la valeur spécialeNone(rien).
Exemple résolu
def carre_affiche(x):
print(x * x)
def carre_renvoie(x):
return x * x
a = carre_affiche(3)
b = carre_renvoie(3)
Que valent a et b ? Qu'affiche le programme ?
Voir la solution
L'appel carre_affiche(3) affiche 9 à l'écran, mais ne renvoie rien : a vaut None.
L'appel carre_renvoie(3) n'affiche rien, mais renvoie 9 : b vaut 9, et on peut écrire b + 1.
Le programme n'affiche donc qu'une seule ligne : 9.
Variables locales : une variable créée à l'intérieur d'une fonction (y compris ses paramètres) n'existe que pendant l'appel. Après l'appel, elle disparaît ; seul le résultat renvoyé reste.
Une fonction ne contient pas d'instruction return. Que renvoie-t-elle ?
5. Des fonctions pour simuler
from random import randint
def lancer_de():
return randint(1, 6)
def frequence_six(n):
compteur = 0
for i in range(n):
if lancer_de() == 6:
compteur = compteur + 1
return compteur / n
Explique ce que fait frequence_six(1000), puis dévoile les étapes.
n reçoit 1000 ; compteur démarre à 0.lancer_de(), qui renvoie un nombre entre 1 et 6.compteur / n : la proportion de « six » obtenus.Dans frequence_six, pourquoi a-t-on intérêt à appeler lancer_de() plutôt qu'à écrire randint(1, 6) directement ?
Erreurs fréquentes
Récapitulatif
- On définit une fonction avec
def nom(parametres):puis un bloc indenté. - On l'appelle avec
nom(arguments); sans argument, les parenthèses restent obligatoires. - Les arguments sont affectés aux paramètres dans l'ordre.
returnrenvoie une valeur réutilisable et termine la fonction ;printne fait qu'afficher.- Les fonctions rendent les programmes lisibles et permettent de répéter une expérience aléatoire pour la simuler.
Teste tes connaissances sur ce cours
Crée ton compte gratuitement pour accéder aux quiz associés et suivre ta progression.
