Ch. 01 · Leçon 3
Structures itératives complètes : Pour…Faire
Ce que vous saurez faire
- Reconnaître le rôle du compteur dans une boucle complète
- Écrire une boucle Pour en Analyse et en Python 3
- Décomposer un traitement répétitif en compteur, accumulateur et condition d'arrêt
- Concevoir une boucle imbriquée pour traiter des structures à deux dimensions
Plan de cours
Faire la même chose 100 fois — sans réécrire 100 lignes
La boucle est l'invention qui transforme un calcul long et répétitif en une instruction concise. Cette leçon vous donne le réflexe : dès que vous voyez "répéter pour chaque…", c'est une boucle Pour.
Concepts clés
- Itération complète — le nombre de répétitions est connu à l'avance.
- Compteur — variable qui prend successivement les valeurs de l'intervalle.
- Accumulateur — variable qui stocke le résultat partiel à chaque tour.
- Boucle imbriquée — une boucle à l'intérieur d'une autre, pour les structures 2D.
Avant de commencer — qu'est-ce que vous savez déjà ?
- Q1. Combien d'itérations effectue
Pour i de 1 à 10 Faire? - Q2. Quelle est la valeur de
SaprèsS ← 0puisS ← S + 1répété 5 fois ? - Q3. En Python, que produit
range(1, 6)?
Q3 est l'angle mort des élèves de 4ème : range(1, 6) donne [1, 2, 3, 4, 5] — la borne supérieure est exclue. Retenez-le maintenant, vous économiserez des heures de débogage.
1. Le contenu du cours
1.1 Analogie : la file de courriers
Imaginez un secrétaire qui doit tamponner 50 enveloppes. Au lieu d'écrire 50 instructions identiques, il automatise :
Pour chaque enveloppe de la pile, tamponner et passer à la suivante.
Une boucle Pour, c'est exactement ce mécanisme : un compteur (numéro de l'enveloppe) qui avance pas à pas, et un corps (l'action de tamponner) qui s'exécute à chaque pas.
1.2 La structure Pour…Faire
Forme algorithmique
Pour compteur de valeur_debut à valeur_fin [Pas n] Faire
instructions
FinPour
compteur: variable de type entier qui prend successivement chaque valeur.valeur_debut,valeur_fin: bornes incluses.Pas n(optionnel) : incrément. Par défaut, le pas est de 1.
Forme Python
for compteur in range(valeur_debut, valeur_fin + 1):
instructions
1.3 Premier exemple — Afficher les 10 premiers entiers
Pour i de 1 à 10 Faire
Écrire(i)
FinPour
Pour i de 1 à 10 Faire
Écrire(i)
FinPour
for i in range(1, 11):
print(i)
Trace mentale. i vaut 1, on affiche 1. i devient 2, on affiche 2. … i devient 10, on affiche 10. À 11, on sort.
1.4 Le motif « accumulateur »
L'usage le plus fréquent : calculer une somme, un produit, un compte, un maximum… en parcourant une plage.
Recette en 3 étapes :
- Initialiser l'accumulateur avant la boucle.
- Dans la boucle, mettre à jour l'accumulateur à partir du compteur.
- Utiliser l'accumulateur après la boucle.
Exemple — Somme des 100 premiers entiers
0) Début somme_100
1) S ← 0 { initialisation de l'accumulateur }
2) Pour i de 1 à 100 Faire
S ← S + i { mise à jour }
FinPour
3) Écrire("Somme = ", S) { utilisation après la boucle }
4) Fin somme_100
0) Début somme_100
1) S ← 0 { initialisation de l'accumulateur }
2) Pour i de 1 à 100 Faire
S ← S + i { mise à jour }
FinPour
3) Écrire("Somme = ", S) { utilisation après la boucle }
4) Fin somme_100
S = 0
for i in range(1, 101):
S = S + i
print("Somme =", S)
# Affiche : Somme = 5050
Valeurs initiales selon l'opération :
| Opération | Valeur initiale | Mise à jour |
|---|---|---|
| Somme | S ← 0 | S ← S + i |
| Produit | P ← 1 | P ← P * i |
| Compte | C ← 0 | C ← C + 1 (sous condition) |
| Maximum | Max ← -∞ (ou première valeur) | Si i > Max Alors Max ← i |
| Minimum | Min ← +∞ (ou première valeur) | Si i < Min Alors Min ← i |
1.5 Boucle avec pas négatif
Pour parcourir de la fin vers le début :
Pour i de 10 à 1 Pas -1 Faire
Écrire(i)
FinPour
Pour i de 10 à 1 Pas -1 Faire
Écrire(i)
FinPour
for i in range(10, 0, -1):
print(i)
1.6 Boucles imbriquées
Une boucle peut en contenir une autre. Le compteur extérieur change lentement, l'intérieur rapidement.
Exemple — Table de multiplication 5×5
for i in range(1, 6):
for j in range(1, 6):
print(i * j, end="\t") # \t = tabulation
print() # retour à la ligne en fin de ligne
Sortie :
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
Pour chaque valeur de i (extérieur), j parcourt entièrement [1..5] (intérieur). Total : 25 multiplications.
1.7 Trace d'exécution — Factorielle de 5
| N° | Instruction | i | F |
|---|---|---|---|
| 01 | ··· | ? | ? |
| 02 | ··· | ? | ? |
| 03 | ··· | ? | ? |
| 04 | ··· | ? | ? |
| 05 | ··· | ? | ? |
| 06 | ··· | ? | ? |
| 07 | ··· | ? | ? |
2. Exercices pratiques
Niveau Débutant — Type bac courant
Écrire un programme qui calcule et affiche la somme des entiers pairs de 1 à 20 inclus.
Voir le corrigé
Version 1 — boucle avec test
S = 0
for i in range(1, 21):
if i % 2 == 0:
S = S + i
print("Somme des pairs =", S)
Version 2 — boucle avec pas (plus efficace)
S = 0
for i in range(2, 21, 2): # 2, 4, 6, ..., 20
S = S + i
print("Somme des pairs =", S)
Résultat : 2 + 4 + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 = 110.
La version 2 fait 10 itérations au lieu de 20 ; à grande échelle, c'est deux fois plus rapide.
Niveau Intermédiaire — Type bac difficile
Lire deux entiers a et b (avec a ≤ b) au clavier, puis afficher le nombre de multiples de 7 dans l'intervalle [a, b] ainsi que leur somme.
Voir le corrigé
a = int(input("a = "))
b = int(input("b = "))
nb = 0 # compteur
somme = 0 # accumulateur
for i in range(a, b + 1):
if i % 7 == 0:
nb = nb + 1
somme = somme + i
print("Nombre de multiples de 7 :", nb)
print("Somme :", somme)
Test mental avec a = 1, b = 30 :
Multiples de 7 dans [1, 30] : 7, 14, 21, 28 → 4 multiples, somme = 70.
Niveau Avancé — Hors bac (bonus)
Écrire un programme qui lit un entier n (avec n ≥ 1) et affiche un triangle d'étoiles centré de hauteur n. Par exemple, pour n = 4 :
*
***
*****
*******
Chaque ligne k (de 1 à n) contient n - k espaces puis 2*k - 1 étoiles.
Voir le corrigé
n = int(input("n = "))
for k in range(1, n + 1):
espaces = " " * (n - k)
etoiles = "*" * (2 * k - 1)
print(espaces + etoiles)
Trace pour n = 4 :
k | n - k espaces | 2k - 1 étoiles | Ligne affichée |
|---|---|---|---|
| 1 | 3 | 1 | " *" |
| 2 | 2 | 3 | " ***" |
| 3 | 1 | 5 | " *****" |
| 4 | 0 | 7 | "*******" |
Astuce. En Python, "x" * 5 répète la chaîne 5 fois → "xxxxx". C'est plus court qu'une boucle imbriquée pour générer les caractères.
Variante intéressante. Affichez un sapin de Noël : un triangle d'étoiles + un tronc de 1 ou 2 caractères. La logique reste la même, ajoutez juste 2-3 lignes après la boucle.
⚠️ Erreurs fréquentes au bac
Avant le quiz, mémorisez ces pièges classiques qui font perdre des points :
- Erreur 1.
range(1, N)au lieu derange(1, N+1): on oublie le dernier élément. Python exclut la borne supérieure. - Erreur 2. Oublier d'initialiser l'accumulateur avant la boucle (
somme ← 0). Sans cette ligne, erreur à la première itération. - Erreur 3. Modifier la variable de boucle dans le corps (
Pour i ... i ← i + 5). Comportement imprévisible. - Erreur 4. Confondre
Pour i De 1 À N Faire(1 à N inclus) etfor i in range(N)(0 à N-1).
3. Quiz de vérification
Boucle Pour et accumulateurs (5 questions)
Combien d'itérations effectue Pour i de 5 à 10 Faire ?
Quelle est la valeur de range(1, 11) en Python ?
Quelle valeur initialiser pour calculer un PRODUIT cumulé ?
Que produit for i in range(10, 0, -1) ?
Dans une boucle imbriquée for i: for j:, combien de fois s'exécute le corps intérieur si i parcourt [1..3] et j parcourt [1..4] ?
En résumé
Avant la leçon 1.4 (Fonctions prédéfinies), assurez-vous de pouvoir :
- ✅ Compter exactement le nombre d'itérations d'une boucle Pour,
- ✅ Choisir la bonne valeur initiale d'un accumulateur (0 pour somme, 1 pour produit, etc.),
- ✅ Traduire de l'algorithmique au Python sans oublier le
+1sur la borne supérieure, - ✅ Lire une trace d'exécution sans erreur de pas.
Sinon, refaites l'exercice 2 avec différentes valeurs de a et b, et vérifiez à la main.