Aller au contenu

Identification de fonctions dans un programme

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.

Reprenons le calcul de l’IMC dans le programme principal :

poids = float(input("Poids (kg) : "))
taille = float(input("Taille (m) : "))
imc = poids / taille ** 2
print("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
  1. Les entrées — de quelles valeurs le calcul a-t-il besoin ? → poids et taille → ce sont les paramètres
  2. La sortie — quel résultat produit-il ? → la valeur de l’IMC → c’est le retour
  3. 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ètres

On 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"))

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.

  • Entrées : le message, les bornes (0, 100)
  • Sortie : la valeur validée
  • Effet : la saisie (voulu ici)
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)

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)

Tu peux suivre cette démarche chaque fois que tu veux extraire une fonction.

  1. Repère le bloc à isoler
    Choisis précisément la portion de code que tu veux transformer en fonction.

  2. Cherche ses entrées
    Quelles variables ou valeurs ce bloc utilise-t-il ?

  3. Cherche sa sortie
    Quelle information ce bloc produit-il à la fin ?

  4. Repère ses effets externes
    Y a-t-il de la saisie, de l’affichage ou une modification visible ailleurs ?

  5. Transforme les dépendances en paramètres
    Tout ce dont le bloc a besoin devrait être passé explicitement à la fonction.

  6. Choisis ce qui doit être retourné
    La fonction doit produire clairement son résultat.