Donner un nom à un calcul ou à un dessin pour le réutiliser
Tu utilises déjà des fonctions écrites par d'autres : print, round, sqrt, forward… Dans cette partie, tu vas écrire les tiennes, pour ne plus recopier deux fois le même calcul.
CoursDéfinir et appeler une fonction
fonction.py
defcarre(x):
return x * x
print(carre(5)) # 25
y = carre(3) + 1# y vaut 10
Élément
Rôle
def carre(x):
définit la fonction carre avec un paramètrex (deux-points obligatoires)
le bloc décalé
les instructions de la fonction
return x * x
renvoie le résultat à l'endroit où la fonction a été appelée
carre(5)
appelle la fonction en donnant la valeur 5 au paramètre x
Vigilance
Définir une fonction ne l'exécute pas : il faut ensuite l'appeler.
La fonction doit être définie avant l'endroit où on l'appelle.
Coursreturn ou print ?
return_print.py
defaffiche_carre(x):
print(x * x)
defrenvoie_carre(x):
return x * x
affiche_carre(4)affiche 16 mais ne renvoie rien : on ne peut pas s'en servir dans un calcul.
renvoie_carre(4)renvoie 16 : on peut écrire 2 * renvoie_carre(4) et obtenir 32.
À retenir
Une fonction de calcul se termine par return : c'est ce qui permet de réutiliser le résultat.
Une fonction peut avoir plusieurs paramètres : def aire(l, h):. Elle peut aussi renvoyer plusieurs valeurs : return a, b.
Les variables créées dans une fonction n'existent que dans la fonction.
CoursDes fonctions qui dessinent
carres.py
from turtle import *
defcarre(c):
for i inrange(4):
forward(c)
left(90)
carre(50)
carre(100)
done()
Cette fonction ne renvoie rien : elle agit (elle dessine). Comme elle est écrite une seule fois, on peut la modifier à un seul endroit.
ExercicesÉcrire des fonctions
EX 72Je m'entraîne🌶️prise en main
Exercice 72 — Lire une fonction
lire.py
deff(x):
return2 * x + 1defg(a, b):
return a * b - 3
Sans l'ordinateur, calcule f(4), f(0), g(2, 5) et f(g(1, 4)).
Vérifie dans la console après avoir exécuté le programme.
Indice
Pour f(g(1, 4)), calcule d'abord g(1, 4), puis utilise le résultat comme valeur de x.
💾 NOM_Prenom_ex72.py
EX 73Je m'entraîne🌶️prise en main
Exercice 73 — Mes premières fonctions
Écris une fonction cube(x) qui renvoie \(x^3\).
Écris une fonction perimetre_rectangle(l, h) qui renvoie le périmètre d'un rectangle de longueur l et de largeur h.
Écris une fonction aire_disque(r) qui renvoie l'aire d'un disque de rayon r (utilise pi après from math import *).
Teste-les dans la console : cube(3) doit donner 27.
Indice 1
x**3 ou x * x * x.
Indice 2
Le périmètre vaut \(2 \times (l + h)\) : attention aux parenthèses.
💾 NOM_Prenom_ex73.py
EX 74Je m'entraîne🌶️🌶️application
Exercice 74 — print ou return ?
deux_fonctions.py
deff_print(x):
print(x + 1)
deff_return(x):
return x + 1
Que fait 2 * f_return(5) ? Et 2 * f_print(5) ?
Exécute les deux dans la console pour vérifier, puis explique la différence.
Indice
Que vaut le résultat d'une fonction qui ne contient pas de return ?
💾 NOM_Prenom_ex74.py
EX 75Je m'entraîne🌶️🌶️application
Exercice 75 — Ma fonction f
On reprend \(f(x) = x^2 - 3x + 2\) de l'exercice 57.
Écris une fonction Python f(x) qui renvoie \(f(x)\).
Calcule f(-1), f(0), f(2.5) et f(10).
Refais le tableau de valeurs de \(-3\) à \(5\) avec une boucle qui appelle ta fonction.
Indice
def f(x): puis return x**2 - 3*x + 2.
💾 NOM_Prenom_ex75.py
EX 76Je m'entraîne🌶️🌶️application
Exercice 76 — Des fonctions qui répondent par vrai ou faux
Écris une fonction est_pair(n) qui renvoie True si n est pair et False sinon.
Écris une fonction est_premier(n) qui renvoie True si n est premier (voir l'exercice 56).
Avec une boucle et est_premier, affiche les nombres premiers inférieurs à 50.
Indice 1
return n % 2 == 0 renvoie directement True ou False.
Indice 2
Pour est_premier, reprends le compteur de diviseurs, puis return nb == 2.
💾 NOM_Prenom_ex76.py
EX 77Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 77 — Polygones et maison
Écris une fonction polygone(n, c) qui dessine un polygone régulier à n côtés de longueur c.
Avec elle, dessine cette maison : un carré de côté 100 surmonté d'un triangle équilatéral de côté 100.
La maison à dessiner.Indice 1
Le polygone reprend la boucle de l'exercice sur les polygones réguliers de la partie 1, avec left(360 / n).
Indice 2
Après le carré, la tortue est revenue à son point de départ, tournée vers la droite. Pour monter au coin supérieur gauche : left(90), forward(100), right(90).
💾 NOM_Prenom_ex77.py
EX 78Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 78 — Le convertisseur GPS en fonctions
Dans l'exercice 38, on écrivait deux fois le même calcul. Range-le dans des fonctions.
Écris dms_vers_dd(d, m, s) qui renvoie l'angle en degrés décimaux.
Écris dd_vers_dms(dd) qui renvoie trois valeurs : d, m, s (avec return d, m, s). On récupère les trois valeurs avec d, m, s = dd_vers_dms(44.1646098).
Écris un programme principal qui utilise les deux fonctions, et vérifie les valeurs de la partie 3.
Indice 1
Reprends le corps de tes programmes des exercices 31 et 32, sans les input : ce sont les paramètres qui apportent les valeurs.
Indice 2
Dans une fonction, on ne met pas print mais return.
💾 NOM_Prenom_ex78.py
EX 79Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 79 — Distance et périmètre
Dans un repère orthonormé, la distance entre \(A(x_A\,;y_A)\) et \(B(x_B\,;y_B)\) est :
\[AB = \sqrt{(x_B - x_A)^2 + (y_B - y_A)^2}\]
Écris une fonction distance(xa, ya, xb, yb) qui renvoie cette distance. Teste avec \(A(1\,;2)\) et \(B(4\,;6)\) : le résultat doit être 5.
Avec cette fonction, calcule le périmètre du triangle \(ABC\) avec \(A(0\,;0)\), \(B(4\,;3)\) et \(C(8\,;0)\).
Indice 1
sqrt s'obtient avec from math import *.
Indice 2
Pour le périmètre, appelle trois fois distance.
💾 NOM_Prenom_ex79.py
EX 80Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 80 — Fraction irréductible
Transforme ton programme de l'exercice 68 en une fonction pgcd(a, b) qui renvoie le PGCD.
Écris une fonction simplifier(a, b) qui renvoie le numérateur et le dénominateur de la fraction irréductible égale à \(\dfrac{a}{b}\).
Teste avec \(\dfrac{84}{36}\) : tu dois trouver \(\dfrac{7}{3}\).
Indice 1
Pour simplifier, on divise le numérateur et le dénominateur par leur PGCD : a // g et b // g.
Indice 2
Comme à l'exercice précédent, return peut renvoyer deux valeurs.
💾 NOM_Prenom_ex80.py
EX 81Défi🌶️🌶️🌶️🌶️défi
Exercice 81 — Distance à vol d'oiseau entre deux points GPS
La Terre est (presque) une sphère de rayon \(R \approx 6371\) km. Entre deux points de latitudes \(\varphi_1\), \(\varphi_2\) et de longitudes \(\lambda_1\), \(\lambda_2\) (en radians), la distance à la surface est donnée par la formule de la haversine :
Écris une fonction distance_gps(lat1, lon1, lat2, lon2) qui prend des coordonnées en degrés décimaux et renvoie la distance en kilomètres. Tu auras besoin de radians, sin, cos, asin et sqrt, tous disponibles avec from math import *.
Calcule la distance à vol d'oiseau entre le lycée (44.1646098 ; 4.6103368) et la tour Eiffel (48.858333 ; 2.294444).
Indice 1
Commence par convertir les quatre angles avec radians(...).
Indice 2
Calcule les écarts dphi et dlambda, puis a = ce qui est sous la racine, puis 2 * R * asin(sqrt(a)).
💾 NOM_Prenom_ex81.py
À retenirSynthèse
Ce que je sais faire
Définir une fonction avec def, des paramètres et return, puis l'appeler.
Distinguer une fonction qui renvoie un résultat (return) d'une fonction qui affiche ou dessine.
Renvoyer plusieurs valeurs avec return a, b.
Ranger un calcul répété (conversion GPS, distance, PGCD) dans une fonction réutilisable.