Une fonction, trois façons de la rater
Exercice de TD · niveau 2 · sciences numériques et technologie (seconde), chapitre 5 — Les fonctions · Définir et appeler une fonction
Énoncé
On veut une fonction aire_disque(r) renvoyant l'aire d'un disque de rayon r (on prendra ). Trois élèves proposent :
# A
def aire_disque(r):
print(3.14159 * r * r)
# B
def aire_disque(r):
aire = 3.14159 * r * r
# C
def aire_disque(r):
return 3.14159 * r ** 2
- Tester
2 * aire_disque(3)avec chacune. Que se passe-t-il ? - Expliquer précisément le défaut de A et celui de B.
Corrigé
1. Avec A, la valeur s'affiche, puis le programme échoue : TypeError, on ne peut multiplier None par . Avec B, rien ne s'affiche et l'on obtient la même TypeError. Avec C, on obtient , le double de l'aire.
2. Défaut de A : elle affiche le résultat mais ne le renvoie pas. À l'écran tout semble juste — c'est ce qui rend l'erreur trompeuse — mais la valeur n'est pas exploitable par le reste du programme.
Défaut de B : elle calcule l'aire et la range dans une variable locale aire… qui disparaît dès que la fonction se termine. Le calcul est fait puis jeté. Sans return, une fonction renvoie None.
La règle : une fonction qui calcule doit renvoyer. On réserve print aux fonctions dont le rôle est précisément d'afficher.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.