Aller au contenu principal

Ch. 02 · Leçon 3

Comment choisir entre Pour, Tant que et Répéter

240 minanalyse · python
Affichage du code

Ce que vous saurez faire

  • Comparer les trois structures itératives selon plusieurs critères
  • Choisir la structure adaptée à un problème donné
  • Transformer une boucle d'un type vers un autre
  • Justifier le choix d'une structure dans une copie d'examen

Plan de cours

Trois outils, une seule règle de choix

Vous savez écrire les trois boucles. Reste la question cruciale au bac : laquelle choisir ? Cette leçon donne une grille de décision claire et justifie chaque cas par des exemples concrets.

Objectifs d'apprentissage

  • Comparer les trois structures
  • Choisir et justifier
  • Convertir entre structures
  • Justifier dans une copie d'examen

Concepts clés

  1. Critère « nombre connu »Pour.
  2. Critère « au moins une fois »Répéter.
  3. Critère « éventuellement zéro »Tant que.
  4. Équivalence théorique des trois ; choix pour la lisibilité.

Avant de commencer — qu'est-ce que vous savez déjà ?

  • Q1. Donnez un exemple où Pour est manifestement le meilleur choix.
  • Q2. Donnez un exemple où Tant que est nécessaire (pas convertible en Pour).
  • Q3. Donnez un exemple où Répéter est plus naturel que Tant que.

1. Le contenu du cours

1.1 Tableau de synthèse

CritèrePour…FaireTant que…FaireRépéter…Jusqu'à
Nombre d'itérations connu ?OuiNonNon
Test de condition(compteur géré auto)Avant le corpsAprès le corps
Exécutions minimum0 (si bornes invalides)01
Mot-clé de sortie(auto à la fin)continuation faussearrêt vraie
Cas typiqueparcours d'un tableau, somme de 1 à Nparcours conditionnel, lecture jusqu'à sentinellevalidation de saisie

1.2 Arbre de décision

Connaît-on le nombre EXACT d'itérations à l'avance ?
│
├── OUI ────────────────────────────► Pour…Faire
│
└── NON
    │
    Le corps doit-il toujours s'exécuter au moins une fois ?
    │
    ├── OUI ──────────────────────────► Répéter…Jusqu'à
    │
    └── NON (peut ne pas s'exécuter) ──► Tant que…Faire

1.3 Les trois pour un même problème

Énoncé : calculer la somme des entiers de 1 à 100.

Version Pour (la plus naturelle)

somme ← 0
Pour i De 1 À 100 Faire
    somme ← somme + i
FinPour

Version Tant que

somme ← 0
i ← 1
Tant que i ≤ 100 Faire
    somme ← somme + i
    i ← i + 1
FinTantQue

Version Répéter

somme ← 0
i ← 1
Répéter
    somme ← somme + i
    i ← i + 1
Jusqu'à i > 100

Verdict. Les trois donnent somme = 5050. Mais la version Pour est manifestement la plus lisible parce que :

  • le compteur est géré automatiquement,
  • le nombre d'itérations (100) saute aux yeux,
  • pas de risque d'oublier d'incrémenter i.

1.4 Quand Pour ne suffit pas

Cas 1 — sentinelle utilisateur

Énoncé : lire des entiers jusqu'à ce que l'utilisateur tape 0, calculer leur somme.

On ne sait pas combien de saisies l'utilisateur fera. Pour est exclu.

  • Tant que : on lit une fois avant d'entrer, puis on lit dans le corps. ✅
  • Répéter : on lit dans le corps, on sort si x = 0. ⚠️ Mais alors 0 est compté dans la somme (à moins de tester avant).
{ Version Tant que — propre }
somme ← 0
Lire(x)
Tant que x ≠ 0 Faire
    somme ← somme + x
    Lire(x)
FinTantQue

Cas 2 — recherche conditionnelle

Énoncé : trouver le premier multiple de 7 supérieur à 1000.

On ne sait pas combien d'itérations seront nécessaires.

n ← 1001
Tant que n mod 7 ≠ 0 Faire
    n ← n + 1
FinTantQue
Écrire(n)    { 1001 → premier multiple ? Non. Continue. }

Réponse : 1001 mod 7 = 6, donc n = 1002, 1003, …, 1008. 1008 mod 7 = 0. ✅

Cas 3 — validation de saisie

Énoncé : lire une note valide entre 0 et 20.

On doit lire au moins une fois.

Répéter
    Lire(note)
Jusqu'à note ≥ 0 ET note ≤ 20

Répéter exprime parfaitement l'intention : « lire, puis vérifier ». Avec Tant que, on devrait initialiser note à une valeur invalide artificielle, ce qui est moins propre.

1.5 Conversion entre structures

Toute boucle est convertible d'un type à un autre. Voici les recettes.

Pour i De a À b Faire X FinPourTant que

i ← a
Tant que i ≤ b Faire
    X
    i ← i + 1
FinTantQue

Répéter X Jusqu'à CTant que

X                  { première exécution }
Tant que NON C Faire
    X
FinTantQue

Tant que C Faire X FinTantQueRépéter

Si C Alors
    Répéter
        X
    Jusqu'à NON C
FinSi

1.6 Trace comparée — somme de saisies positives

Saisies : 5, 3, -1

Avec Tant que

Trace d'exécution
0 / 4
Instructionxsomme
01···??
02···??
03···??
04···??

Avec Répéter (et test pour ne pas accumuler la sentinelle)

somme ← 0
Répéter
    Lire(x)
    Si x > 0 Alors
        somme ← somme + x
    FinSi
Jusqu'à x ≤ 0

Verdict. La version Tant que est plus directe car la condition de boucle et la condition d'accumulation sont la même. Avec Répéter, il faut un Si interne — plus de code, plus de risque d'erreur.


2. Exercices pratiques

Niveau Débutant — Type bac courant

Exercice 1facile
Identifier la structure adaptée

Pour chacun des problèmes suivants, choisir la structure la plus adaptée (Pour, Tant que, Répéter) et justifier en une phrase.

  1. Afficher la table de 9 (de 1 à 10).
  2. Lire un mot de passe jusqu'à ce qu'il soit correct.
  3. Compter le nombre de mots dans une phrase.
  4. Trouver le plus petit n tel que 2^n > 1000.
  5. Afficher tous les caractères d'une chaîne saisie.
Voir le corrigé
#StructureJustification
1Pour10 itérations connues à l'avance.
2RépéterAu moins une lecture nécessaire ; on s'arrête quand correct.
3Pour ou Tant queSi on connaît la longueur (Pour i De 0 À len-1), Pour ; sinon Tant que.
4Tant quePas de nombre d'itérations connu ; éventuellement 0 si déjà 2^0 > 1000 (faux ici, mais le motif est sûr).
5PourLa longueur est connue (long(ch)).

Niveau Intermédiaire — Type bac difficile

Exercice 2moyen
Conversion Pour → Tant que → Répéter

Soit le programme Pour qui affiche les puissances de 2 jusqu'à 1024 :

puissance ← 1
Pour i De 0 À 10 Faire
    Écrire(puissance)
    puissance ← puissance × 2
FinPour
  1. Récrire avec Tant que.
  2. Récrire avec Répéter.
  3. Comparer les trois versions : laquelle est la plus claire ? Pourquoi ?
Voir le corrigé

Version Tant que

puissance ← 1
i ← 0
Tant que i ≤ 10 Faire
    Écrire(puissance)
    puissance ← puissance × 2
    i ← i + 1
FinTantQue

Version Répéter

puissance ← 1
i ← 0
Répéter
    Écrire(puissance)
    puissance ← puissance × 2
    i ← i + 1
Jusqu'à i > 10

Comparaison

VersionLisibilitéRisque d'erreur
Pour★★★★★Faible : compteur géré auto
Tant que★★★Moyen : oubli d'incrément possible
Répéter★★★Moyen : même risque

Verdict. Quand le nombre d'itérations est connu (11 ici, de i=0 à i=10 inclus), Pour est toujours le meilleur choix : il met le compteur en avant, supprime le risque d'oubli, et minimise les lignes.

Niveau Avancé — Hors bac (bonus)

Exercice 3difficile
Algorithme de Newton pour la racine carrée

La méthode de Newton approxime racine(a) (avec a > 0) par la suite :

x_0 = a
x_{n+1} = (x_n + a / x_n) / 2

On s'arrête quand |x_{n+1} - x_n| < epsilon (précision fixée).

  1. Quelle structure choisir ? Justifier.
  2. Implémenter en Python pour a = 2, epsilon = 1e-9.
  3. Combien d'itérations faut-il pour converger ? Comparer avec math.sqrt(2).
Voir le corrigé

1. Choix de structure

Répéter est idéal : on doit calculer au moins un nouveau x avant de pouvoir mesurer l'écart |x_new - x|. Avec Tant que, il faudrait initialiser x_new à une valeur très différente de x pour entrer — laid.

2. Implémentation

0) Début newton
1) Lire(a)
2) x ← a
3) epsilon ← 1e-9
4) etapes ← 0
5) Répéter
       x_new ← (x + a / x) / 2
       ecart ← abs(x_new - x)
       x ← x_new
       etapes ← etapes + 1
   Jusqu'à ecart < epsilon
6) Écrire("racine(", a, ") ≈", x, "en", etapes, "étapes")
7) Fin newton
a = float(input("a > 0 : "))
x = a
epsilon = 1e-9
etapes = 0
while True:
    x_new = (x + a / x) / 2
    ecart = abs(x_new - x)
    x = x_new
    etapes += 1
    if ecart < epsilon:
        break
print(f"racine({a}) ≈ {x} en {etapes} étapes")

import math
print(f"math.sqrt({a}) = {math.sqrt(a)}")

3. Résultat pour a = 2

Étapex
02.0
11.5
21.4166666…
31.4142156…
41.4142135623730951
51.4142135623730951 (stable)

5 étapes suffisent pour la précision 1e-9. La convergence est dite quadratique : à chaque étape, le nombre de décimales correctes double.

Comparaison avec math.sqrt(2) = 1.4142135623730951 → résultat identique à la précision flottante près.


⚠️ Erreurs fréquentes au bac

Avant le quiz, mémorisez ces pièges classiques qui font perdre des points :

  • Erreur 1. Utiliser Pour quand le nombre d'itérations dépend d'une condition (saisie utilisateur, recherche). Choisir Tant que ou Répéter.
  • Erreur 2. Utiliser Tant que pour une validation de saisie (mot de passe). Répéter est plus naturel : on doit lire AU MOINS une fois.
  • Erreur 3. Ne pas justifier le choix de la structure dans la copie. Même un code correct perd des points sans justification.
  • Erreur 4. Confondre la conversion Répéter X Jusqu'à CTant que NON C Faire X FinTantQue : appliquer la négation logique de la condition.

3. Quiz de vérification

Choix de la structure itérative (5 questions)

1

Vous devez lire la dernière ligne d'un fichier dont vous ne connaissez pas le nombre de lignes. Quelle structure ?

2

Quelle structure exécute son corps AU MOINS une fois quoi qu'il arrive ?

3

Convertir Pour i De 1 À N en Tant que nécessite :

4

Vous demandez à l'utilisateur de confirmer (O/N) avant de quitter un programme. Quelle boucle ?

5

Toute boucle Pour peut-elle être réécrite en Tant que ?


En résumé

  • Pour : nombre d'itérations connu.
  • Tant que : pré-test, possibilité de zéro exécution.
  • Répéter : post-test, au moins une exécution.
  • ✅ Toujours justifier le choix en une phrase dans la copie.

Prochain chapitre : Sous-programmes — décomposer un problème en modules réutilisables.

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.