Identification de fonctions dans un programme
Identifier les dépendances d’une fonction
Section intitulée « Identifier les dépendances d’une fonction »Quand tu veux transformer un bloc de code en fonction, la bonne question à te poser est :
De quoi ce bloc a-t-il besoin pour fonctionner, et qu’est-ce qu’il produit ?
Avant d’écrire un def, il faut donc repérer trois éléments.
1. Les entrées
Quelles valeurs faut-il fournir au bloc pour qu’il puisse faire son travail ?
Ces valeurs deviendront souvent les paramètres de la fonction.
2. La sortie
Quel résultat le bloc produit-il ?
Ce résultat deviendra souvent la valeur retournée avec return.
3. Les effets externes
Le bloc fait-il autre chose qu’un calcul ?
Par exemple : lire une saisie, afficher un message, modifier un état, écrire dans un fichier, etc.
Exemple 1 — Isoler un calcul
Section intitulée « Exemple 1 — Isoler un calcul »Reprenons le calcul de l’IMC dans le programme principal :
poids = float(input("Poids (kg) : "))taille = float(input("Taille (m) : "))imc = poids / taille ** 2print("Ton IMC est :", format(imc, ".2f"))Dans ce programme, tout est mélangé : la saisie, le calcul et l’affichage.
Si on veut extraire seulement le calcul, on regarde ce bloc :
imc = poids / taille ** 2- Les entrées — de quelles valeurs le calcul a-t-il besoin ? →
poidsettaille→ ce sont les paramètres - La sortie — quel résultat produit-il ? → la valeur de l’IMC → c’est le retour
- Les effets — le calcul fait-il autre chose ? → non (pas d’affichage, pas de saisie)
On peut donc en faire une fonction de calcul :
# entrées sortie# ↓ ↓ ↓def calculer_imc(poids, taille): imc = poids / taille ** 2 return imc# dépend seulement de ses paramètresOn l’utilise ensuite ainsi :
poids = float(input("Poids (kg) : "))taille = float(input("Taille (m) : "))imc = calculer_imc(poids, taille)print("Ton IMC est :", format(imc, ".2f"))Exemple 2 — Généraliser une saisie validée
Section intitulée « Exemple 2 — Généraliser une saisie validée »Voici maintenant un autre type de bloc :
while True: note = float(input("Note (0 à 100) : ")) if note >= 0 and note <= 100: break print("Erreur : la note doit être entre 0 et 100.")Cette fois, le bloc ne fait pas seulement un calcul. Il interagit avec l’utilisateur.
Dépendances identifiées
Section intitulée « Dépendances identifiées »- Entrées : le message, les bornes (0, 100)
- Sortie : la valeur validée
- Effet : la saisie (voulu ici)
Fonction plus générale
Section intitulée « Fonction plus générale »def saisir_nombre(message, minimum, maximum): while True: valeur = float(input(message)) if minimum <= valeur <= maximum: return valeur print("Erreur : la valeur doit être entre", minimum, "et", maximum)Cette fonction est générique : elle peut être réutilisée dans plusieurs contextes.
note = saisir_nombre("Note (0 à 100) : ", 0, 100)age = saisir_nombre("Âge (0 à 120) : ", 0, 120)temperature = saisir_nombre("Température (-50 à 50) : ", -50, 50)Deux types de fonctions à distinguer
Section intitulée « Deux types de fonctions à distinguer »Fonction de calcul
- reçoit des valeurs ;
- produit un résultat ;
- évite les interactions directes avec l’utilisateur.
Exemple : calculer_imc(poids, taille)
Fonction avec interaction
- reçoit aussi des paramètres ;
- retourne une valeur ;
- mais réalise en plus des actions visibles comme une saisie ou un affichage.
Exemple : saisir_nombre(msg, min, max)
Méthode à appliquer
Section intitulée « Méthode à appliquer »Tu peux suivre cette démarche chaque fois que tu veux extraire une fonction.
-
Repère le bloc à isoler
Choisis précisément la portion de code que tu veux transformer en fonction. -
Cherche ses entrées
Quelles variables ou valeurs ce bloc utilise-t-il ? -
Cherche sa sortie
Quelle information ce bloc produit-il à la fin ? -
Repère ses effets externes
Y a-t-il de la saisie, de l’affichage ou une modification visible ailleurs ? -
Transforme les dépendances en paramètres
Tout ce dont le bloc a besoin devrait être passé explicitement à la fonction. -
Choisis ce qui doit être retourné
La fonction doit produire clairement son résultat.