Ch. 03 · Leçon 2
Procédures vs Fonctions
Ce que vous saurez faire
- Distinguer une procédure d'une fonction
- Écrire procédures et fonctions en notation algorithmique et Python
- Choisir entre procédure et fonction selon le besoin
- Construire une bibliothèque de sous-programmes réutilisables
Plan de cours
Calculer ou agir, telle est la question
Les sous-programmes se déclinent en deux familles : ceux qui produisent une valeur (fonctions), et ceux qui effectuent une action (procédures). Bien les distinguer rend le code intuitif à lire et à utiliser.
Objectifs d'apprentissage
- Différence procédure / fonction
- Écrire les deux types
- Choisir le bon type
- Bibliothèque réutilisable
Concepts clés
- Fonction — retourne une valeur via
Retourner. - Procédure — exécute une action, ne retourne rien.
- Python —
defpour les deux ; distinction par présence ou absence dereturn. - Usage — fonction dans une expression, procédure comme instruction.
Avant de commencer — qu'est-ce que vous savez déjà ?
- Q1. En 3ème année, avez-vous utilisé des fonctions Python comme
len(...)ouabs(...)? - Q2.
print(...)retourne-t-il quelque chose, ou agit-il sur l'écran sans valeur ? - Q3. Quelle est la différence entre « afficher la moyenne » et « calculer la moyenne » ?
1. Le contenu du cours
1.1 Fonction : retourner une valeur
Fonction carre(x : réel) → réel
Retourner(x × x)
FinFonction
{ Utilisation }
y ← carre(5) { y vaut 25 }
Écrire(carre(3)) { affiche 9 }
Fonction carre(x : réel) → réel
Retourner(x × x)
FinFonction
{ Utilisation }
y ← carre(5) { y vaut 25 }
Écrire(carre(3)) { affiche 9 }
def carre(x: float) -> float:
return x * x
# Utilisation
y = carre(5) # y vaut 25
print(carre(3)) # affiche 9
Caractéristiques.
- Une fonction s'utilise dans une expression :
2 × carre(7),Si carre(n) > 100 Alors …. - Elle a un type de retour déclaré.
- Elle se termine par
Retourner(valeur)(algorithmique) oureturn valeur(Python).
1.2 Procédure : effectuer une action
Procédure AfficherEncadré(message : chaîne)
Écrire("┌─────────────────┐")
Écrire("│ ", message, " │")
Écrire("└─────────────────┘")
FinProcedure
{ Utilisation }
AfficherEncadré("Bonjour")
Procédure AfficherEncadré(message : chaîne)
Écrire("┌─────────────────┐")
Écrire("│ ", message, " │")
Écrire("└─────────────────┘")
FinProcedure
{ Utilisation }
AfficherEncadré("Bonjour")
def afficher_encadre(message: str) -> None:
print("┌─────────────────┐")
print("│", message, "│")
print("└─────────────────┘")
# Utilisation
afficher_encadre("Bonjour")
Caractéristiques.
- Une procédure s'appelle comme une instruction :
AfficherEncadré("Bonjour"), sans←autour. - Pas de type de retour (algorithmique) ou
-> None(Python). - Aucun
Retourner(oureturnsans valeur).
1.3 En Python : un seul mot-clé pour les deux
Python ne distingue pas syntaxiquement procédure et fonction. Toutes sont définies avec def. La distinction se fait sémantiquement :
def calculer_aire(largeur: float, hauteur: float) -> float:
"""Fonction : retourne l'aire."""
return largeur * hauteur
def afficher_resultat(nom: str, valeur: float) -> None:
"""Procédure : affiche, ne retourne rien."""
print(f"{nom} = {valeur}")
# Usage
aire = calculer_aire(3, 4) # appel de fonction dans une expression
afficher_resultat("Aire", aire) # appel de procédure comme instruction
1.4 Choisir : fonction ou procédure ?
Règle simple :
Si le code appelant a besoin du résultat pour continuer → fonction. Si le code appelant veut juste qu'une action soit effectuée → procédure.
| Besoin | Type | Exemple |
|---|---|---|
| Calculer un PGCD | Fonction | g = pgcd(48, 18) |
| Afficher un bulletin | Procédure | afficher_bulletin(...) |
| Tester si un nombre est premier | Fonction (retourne booléen) | if est_premier(n): ... |
| Mettre à jour un score | Procédure (modifie un paramètre VAR) | mettre_a_jour(VAR score, points) |
| Lire un fichier | Fonction (retourne contenu) | contenu = lire_fichier("data.txt") |
1.5 Exemple complet : calcul de mention
Décomposition
calculer_moyenne(notes)→ fonction (produit un réel).determiner_mention(moyenne)→ fonction (produit une chaîne).afficher_bulletin(nom, moyenne, mention)→ procédure (effet de bord : écran).
Code Python
def calculer_moyenne(notes: list[float]) -> float:
"""Retourne la moyenne d'une liste de notes."""
if len(notes) == 0:
return 0.0
return sum(notes) / len(notes)
def determiner_mention(moyenne: float) -> str:
"""Retourne la mention correspondant à la moyenne."""
if moyenne >= 16:
return "Très Bien"
elif moyenne >= 14:
return "Bien"
elif moyenne >= 12:
return "Assez Bien"
elif moyenne >= 10:
return "Passable"
else:
return "Refusé"
def afficher_bulletin(nom: str, moyenne: float, mention: str) -> None:
"""Affiche le bulletin d'un élève."""
print("─" * 40)
print(f"Élève : {nom}")
print(f"Moyenne : {moyenne:.2f} / 20")
print(f"Mention : {mention}")
print("─" * 40)
# Programme principal
notes = [15.5, 12.0, 17.0, 14.5, 13.0]
nom = "Salma Trabelsi"
moyenne = calculer_moyenne(notes)
mention = determiner_mention(moyenne)
afficher_bulletin(nom, moyenne, mention)
Trace
| N° | Instruction | notes | moyenne | mention |
|---|---|---|---|---|
| 01 | ··· | ? | ? | ? |
| 02 | ··· | ? | ? | ? |
| 03 | ··· | ? | ? | ? |
| 04 | ··· | ? | ? | ? |
2. Exercices pratiques
Niveau Débutant — Type bac courant
Écrire une fonction celsius_to_fahrenheit(t) qui prend une température en degrés Celsius et retourne sa conversion en Fahrenheit. La formule est : F = C × 9/5 + 32.
Tester pour 0, 100, 36.6.
Voir le corrigé
Fonction celsius_to_fahrenheit(c : réel) → réel
Retourner(c × 9 / 5 + 32)
FinFonction
def celsius_to_fahrenheit(c: float) -> float:
return c * 9 / 5 + 32
# Tests
print(celsius_to_fahrenheit(0)) # 32.0
print(celsius_to_fahrenheit(100)) # 212.0
print(celsius_to_fahrenheit(36.6)) # 97.88
Niveau Intermédiaire — Type bac difficile
Écrire une procédure afficher_menu qui affiche les options d'une calculatrice :
================================
CALCULATRICE — Menu
================================
1. Addition
2. Soustraction
3. Multiplication
4. Division
0. Quitter
================================
Puis une fonction lire_choix() qui demande à l'utilisateur de saisir un entier entre 0 et 4 et le retourne (avec validation).
Écrire le programme principal qui combine les deux.
Voir le corrigé
def afficher_menu() -> None:
print("=" * 32)
print(" CALCULATRICE — Menu")
print("=" * 32)
print(" 1. Addition")
print(" 2. Soustraction")
print(" 3. Multiplication")
print(" 4. Division")
print(" 0. Quitter")
print("=" * 32)
def lire_choix() -> int:
while True:
choix = int(input("Votre choix (0-4) : "))
if 0 <= choix <= 4:
return choix
print("Choix invalide, recommencer.")
# Programme principal
afficher_menu()
choix = lire_choix()
print(f"Vous avez choisi l'option {choix}")
Observation pédagogique.
afficher_menuest une procédure (effet sur écran, rien à retourner).lire_choixest une fonction (le code appelant a besoin du choix pour continuer).
Niveau Avancé — Hors bac (bonus)
Construire une bibliothèque de sous-programmes pour la géométrie :
- Fonction
aire_rectangle(L, l)→ réel. - Fonction
aire_cercle(r)→ réel. - Fonction
aire_triangle(b, h)→ réel. - Fonction
perimetre_rectangle(L, l)→ réel. - Procédure
afficher_figure(nom, aire, perimetre)qui affiche un résumé encadré.
Écrire un programme qui utilise ces 5 sous-programmes pour afficher les caractéristiques d'un rectangle 5×3, d'un cercle de rayon 7, et d'un triangle base 4 hauteur 6.
Voir le corrigé
import math
def aire_rectangle(L: float, l: float) -> float:
return L * l
def aire_cercle(r: float) -> float:
return math.pi * r * r
def aire_triangle(b: float, h: float) -> float:
return (b * h) / 2
def perimetre_rectangle(L: float, l: float) -> float:
return 2 * (L + l)
def afficher_figure(nom: str, aire: float, perimetre: float = -1) -> None:
print("┌" + "─" * 36 + "┐")
print(f"│ {nom:<34} │")
print(f"│ Aire : {aire:>10.2f} │")
if perimetre >= 0:
print(f"│ Périmètre : {perimetre:>10.2f} │")
print("└" + "─" * 36 + "┘")
# Programme principal
afficher_figure(
"Rectangle 5 × 3",
aire_rectangle(5, 3),
perimetre_rectangle(5, 3),
)
afficher_figure("Cercle r = 7", aire_cercle(7))
afficher_figure("Triangle b=4, h=6", aire_triangle(4, 6))
Observation. Pour le cercle et le triangle, on n'affiche pas de périmètre (le rayon ne suffit pas pour le cercle, les côtés ne sont pas donnés pour le triangle). On utilise un paramètre par défaut perimetre = -1 comme signal d'absence — astuce Python idiomatique.
Réutilisation. Cette bibliothèque peut servir telle quelle dans un programme de dessin, un quiz géométrique, ou un outil de calcul scolaire — c'est le bénéfice de la modularité.
⚠️ Erreurs fréquentes au bac
Avant le quiz, mémorisez ces pièges classiques qui font perdre des points :
- Erreur 1. Utiliser une fonction quand on n'a rien à retourner (afficher, modifier en place). Préférer une procédure.
- Erreur 2. Oublier
Retourner(algo) oureturn(Python) dans une fonction. Le compilateur ne signale pas toujours l'erreur. - Erreur 3. Écrire une
Fonctionen algorithmique sansRetournerà la fin → incohérence pénalisée. - Erreur 4. Penser que
print(x)retourne la valeur affichée. Non :printretourneNone. Pour utiliser une valeur affichée, calculer et stocker d'abord.
3. Quiz de vérification
Procédures et fonctions (5 questions)
Quelle est la différence principale entre fonction et procédure ?
En Python, quel mot-clé définit à la fois fonctions et procédures ?
`print("hello")` est :
Pour 'calculer la moyenne d'une liste', je crée :
Quelle annotation Python indique qu'une fonction ne retourne rien ?
En résumé
- ✅ Fonction = retourne une valeur, s'utilise dans une expression.
- ✅ Procédure = effectue une action, s'appelle comme instruction.
- ✅ Python :
defpour les deux,returndistingue. - ✅ Choix : si le résultat doit être utilisé, fonction ; sinon, procédure.
Prochaine leçon : Paramètres : passage par valeur et par variable — comment les modules échangent des données.