Un programme bien écrit est découpé en fonctions courtes, chacune avec un rôle précis. Pour qu’une fonction soit utilisable par d’autres (ou par toi dans trois semaines), il faut dire ce qu’elle attend et ce qu’elle renvoie : c’est sa spécification. Il faut ensuite vérifier qu’elle fait bien ce qui est annoncé : ce sont les tests.

Une question sur ce cours ?
ULU, le tuteur d’ULUMINE, t’aide à partir de ce cours.
Objectifs
- Définir et appeler une fonction, distinguer return et print
- Distinguer variables locales et variables globales
- Rédiger la spécification d’une fonction (docstring, préconditions, postconditions)
- Écrire un jeu de tests avec assert, en pensant aux cas limites
- Utiliser une bibliothèque (import) et sa documentation (help)
1. Définir et appeler une fonction
def aire_rectangle(longueur, largeur):
return longueur * largeur
print(aire_rectangle(4, 3)) # affiche 12- def introduit la fonction, suivie de son nom et de ses paramètres entre parenthèses.
- Lors de l’appel aire_rectangle(4, 3), les arguments 4 et 3 sont affectés aux paramètres.
- return renvoie une valeur et termine immédiatement la fonction.
- Une fonction sans return renvoie la valeur spéciale None.
Un paramètre peut avoir une valeur par défaut : avec def puissance(x, n=2), l’appel puissance(5) renvoie 25.
2. Variables locales et globales
Une variable affectée dans une fonction est locale : elle n’existe que pendant l’exécution de la fonction et n’est pas visible à l’extérieur. Une variable définie dans le programme principal est globale.
x = 5
def f():
x = 10 # nouvelle variable locale
return x
print(f()) # 10
print(x) # 5 : la variable globale n'a pas changé3. Spécifier une fonction
Spécification : Description de ce que fait une fonction : son prototype (nom, paramètres et leurs types), ses préconditions (conditions que doivent vérifier les arguments) et ses postconditions (ce qui est garanti sur le résultat).
def moyenne(notes: list) -> float:
"""Renvoie la moyenne des nombres de la liste notes.
Précondition : notes est une liste non vide de nombres.
Postcondition : le résultat est compris entre min(notes) et max(notes).
"""
assert len(notes) > 0, "la liste ne doit pas être vide"
return sum(notes) / len(notes)L’instruction assert condition ne fait rien si la condition est vraie ; sinon elle arrête le programme avec une erreur AssertionError. On l’utilise pour vérifier une précondition ou pour écrire des tests.
4. Tester une fonction
Un jeu de tests compare le résultat de la fonction à la valeur attendue sur des exemples choisis : des cas généraux et des cas limites (liste vide ou à un seul élément, valeur 0, nombres négatifs, bornes d’un intervalle…).
def maximum(L):
m = 0
for x in L:
if x > m:
m = x
return m
assert maximum([3, 8, 1]) == 8 # passe
assert maximum([-3, -1, -7]) == -1 # échoue : la fonction renvoie 0Corriger l’erreur détectée
- Le test avec des nombres négatifs montre que l’initialisation m = 0 est fausse.
- On initialise avec le premier élément : m = L[0] (et on ajoute la précondition : L non vide).
Les deux tests passent. Attention : des tests qui passent ne prouvent pas qu’une fonction est correcte, ils peuvent seulement révéler des erreurs.
5. Utiliser une bibliothèque
import math
print(math.sqrt(16)) # 4.0
from random import randint
de = randint(1, 6) # entier entre 1 et 6 inclus
help(math.floor) # affiche la documentationAvec import math, on écrit math.sqrt ; avec from math import sqrt, on écrit directement sqrt. Lire la documentation (help, ou la documentation en ligne) permet de connaître la spécification des fonctions fournies.
À retenir
- return renvoie une valeur et arrête la fonction ; sans return, la fonction renvoie None.
- Les variables affectées dans une fonction sont locales.
- Spécification = prototype + préconditions + postconditions, écrite dans la docstring.
- assert condition arrête le programme si la condition est fausse : on l’utilise pour les préconditions et les tests.
- Un bon jeu de tests contient des cas généraux et des cas limites ; il révèle des erreurs mais ne prouve pas la correction.

Et maintenant, à toi !
Vérifie que tu as compris avec les exercices, puis révise avec la fiche.