Partie 7 · exercices 72 à 81

Écrire ses propres fonctions

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
def carre(x):
    return x * x

print(carre(5))          # 25
y = carre(3) + 1         # y vaut 10
ÉlémentRôle
def carre(x):définit la fonction carre avec un paramètre x (deux-points obligatoires)
le bloc décaléles instructions de la fonction
return x * xrenvoie 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
def affiche_carre(x):
    print(x * x)

def renvoie_carre(x):
    return x * x

À 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 *

def carre(c):
    for i in range(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
def f(x):
    return 2 * x + 1

def g(a, b):
    return a * b - 3
  1. Sans l'ordinateur, calcule f(4), f(0), g(2, 5) et f(g(1, 4)).
  2. 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

  1. Écris une fonction cube(x) qui renvoie \(x^3\).
  2. Écris une fonction perimetre_rectangle(l, h) qui renvoie le périmètre d'un rectangle de longueur l et de largeur h.
  3. É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
def f_print(x):
    print(x + 1)

def f_return(x):
    return x + 1
  1. Que fait 2 * f_return(5) ? Et 2 * f_print(5) ?
  2. 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.

  1. Écris une fonction Python f(x) qui renvoie \(f(x)\).
  2. Calcule f(-1), f(0), f(2.5) et f(10).
  3. 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

  1. Écris une fonction est_pair(n) qui renvoie True si n est pair et False sinon.
  2. Écris une fonction est_premier(n) qui renvoie True si n est premier (voir l'exercice 56).
  3. 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

  1. Écris une fonction polygone(n, c) qui dessine un polygone régulier à n côtés de longueur c.
  2. 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.

  1. Écris dms_vers_dd(d, m, s) qui renvoie l'angle en degrés décimaux.
  2. É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).
  3. É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}\]
  1. É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.
  2. 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

  1. Transforme ton programme de l'exercice 68 en une fonction pgcd(a, b) qui renvoie le PGCD.
  2. Écris une fonction simplifier(a, b) qui renvoie le numérateur et le dénominateur de la fraction irréductible égale à \(\dfrac{a}{b}\).
  3. 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 :

\[d = 2R \times \arcsin\left(\sqrt{\sin^2\!\left(\frac{\varphi_2 - \varphi_1}{2}\right) + \cos\varphi_1 \cos\varphi_2 \sin^2\!\left(\frac{\lambda_2 - \lambda_1}{2}\right)}\right)\]
  1. É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 *.
  2. 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.