Travaux Pratiques · Seconde · Informatique

TP 4 : Boucles while

Répéter des instructions tant qu'une condition reste vraie — pour les situations où l'on ne connaît pas à l'avance le nombre de répétitions.

while / condition compteur incrémentation ⚠ boucle infinie def / return
⏳ Chargement de Python en cours…
0
Rappels des TP précédents
›

Avant de commencer, quelques rappels utiles pour ce TP.

Rappel : la fonction print(). Elle affiche à l'écran ce qu'on lui donne entre parenthèses. Par exemple, print(3 + 4) affiche 7, et print("Bonjour") affiche Bonjour. Tu peux aussi lui donner plusieurs éléments séparés par des virgules : print("Résultat :", 7) affiche Résultat : 7. Essaie ça dans la console ci-dessous avant de répondre aux premières questions.
À retenir :
  • Affectation et incrémentation : i = i + 1 ajoute 1 à i (on peut aussi écrire i += 1)
  • Comparateurs : == != < > <= >= — renvoient True ou False
  • Boucle for i in range(n): — répète un bloc un nombre connu à l'avance de fois
  • Division entière // et reste % : 17 // 5 vaut 3, 17 % 5 vaut 2
Console Python — Rappels
# Teste ici ce dont tu te souviens !
>>>
?
Si i = 3, que vaut i après l'instruction i = i + 1 ?
3
4
C'est une erreur, Python refuse cette instruction
?
Que vaut 7 % 2 ?
3
1
3.5
1
while — La boucle « tant que »
›
Objectif n°1

Comprendre la syntaxe de while : la condition est testée avant chaque tour, et la boucle continue tant qu'elle est vraie.

Contrairement à for, qui répète un nombre de fois fixé à l'avance, la boucle while répète un bloc d'instructions tant qu'une condition est vraie — sans savoir forcément combien de tours cela va prendre.

Syntaxe :
while condition :
    # instructions répétées tant que condition est True

À chaque tour, Python réévalue la condition. Si elle est vraie, il exécute le bloc indenté puis revient tester la condition. Dès qu'elle est fausse, la boucle s'arrête.
Boucle forBoucle while
Nombre de tours connu à l'avance (donné par range())Nombre de tours inconnu à l'avance, dépend de l'évolution d'une variable
for i in range(5):
    print(i)
i = 0
while i < 5:
    print(i)
    i = i + 1
⚠ Danger : la boucle infinie. Si la condition ne devient jamais fausse (par exemple, si tu oublies d'incrémenter la variable), la boucle ne s'arrête jamais et le programme reste bloqué. Si un de tes essais ne s'arrête pas après quelques secondes, recharge la page (F5).
Exercice 1 · Observer un compteur

Ce programme affiche les nombres de 1 à 5 avec une boucle while. Lis-le attentivement avant de le lancer.

  • 1Lance le programme et vérifie ce qui s'affiche.
  • 2Modifie la condition pour afficher les nombres de 1 à 10.
⚠ Ne supprime surtout pas la ligne i = i + 1 pour « voir ce qui se passe » : la condition i <= 5 resterait toujours vraie, la boucle ne s'arrêterait jamais, et la page se figerait (il faudrait la recharger avec F5).
Éditeur Python — TP4_exo1.py
?
Combien de fois le bloc indenté est-il exécuté avec while i <= 5 et i qui part de 1 ?
4 fois
5 fois
6 fois
?
Que se passerait-il si on retirait la ligne i = i + 1 de ce programme ?
Rien ne change, Python incrémente i automatiquement
Boucle infinie : i ne changerait jamais de valeur
Python affiche une erreur de syntaxe immédiatement
Exercice 2 · Compte à rebours
Rappel : jusqu'ici, on a fait augmenter une variable avec i = i + 1. Pour la faire diminuer, on écrit de la même façon i = i - 1.
Et voici les symboles de comparaison qui peuvent t'être utiles. Attention : les symboles « supérieur ou égal » (≥) et « inférieur ou égal » (≤) n'existent pas sur le clavier — en Python, on les écrit avec deux caractères tapés à la suite, sans espace entre eux :
  • > : strictement supérieur (une seule touche)
  • >= : supérieur ou égal — on tape la touche > puis la touche = juste après
  • < : strictement inférieur (une seule touche)
  • <= : inférieur ou égal — on tape la touche < puis la touche = juste après
  • == : égal à — on tape deux fois la touche =
  • != : différent de — on tape la touche ! puis la touche =

Complète ce programme qui compte à rebours de 10 jusqu'à 1, puis affiche « Décollage ! ».

Éditeur Python — TP4_exo2.py
✎
Si on remplace i > 0 par i > 3, quelle est la dernière valeur affichée avant « Décollage ! » ?
La boucle s'arrête dès que la condition devient fausse — donc dès que i vaut 3 ou moins.
2
Accumulateurs et pièges à éviter
›
Objectif n°2

Utiliser une variable accumulatrice avec while, et savoir repérer la cause d'une boucle infinie.

Comme avec for, on peut utiliser une variable accumulatrice pour cumuler un résultat au fil des tours (une somme, un produit…).

Exercice 3 · Somme des entiers de 1 à n

Complète ce programme qui calcule la somme des entiers de 1 à n à l'aide d'une boucle while.

  • 1Complète la condition et l'accumulation.
  • 2Lance le programme avec n = 10 : tu dois obtenir 55.
Éditeur Python — TP4_exo3.py
?
Pourquoi la variable i doit-elle être incrémentée à l'intérieur de la boucle et non avant ?
Ça n'a pas d'importance, on peut l'écrire n'importe où
Sinon, la boucle risque de ne jamais s'arrêter
Parce que Python interdit d'incrémenter une variable avant une boucle
Exercice 4 · Débogage : trouver la boucle infinie

Le programme ci-dessous ne s'arrête jamais — il contient une erreur classique. Ne l'exécute pas : analyse-le seulement à la lecture.

n = 5
i = 0
somme = 0
while i < n:
    somme = somme + i

print("Somme :", somme)
?
Pourquoi ce programme boucle-t-il indéfiniment ?
Parce que n vaut 5, ce qui est trop grand
Parce que i n'est jamais modifié dans la boucle
Parce que somme devrait être initialisée à 1 et non à 0

Corrige maintenant le programme ci-dessous en ajoutant la ligne manquante, puis lance-le.

Éditeur Python — TP4_exo4_corrige.py
✎
Quelle ligne exacte faut-il ajouter pour corriger ce programme ?
Il faut faire progresser i à chaque tour.
3
Quand utiliser while plutôt que for ?
›
Objectif n°3

Reconnaître les situations où le nombre de répétitions n'est pas connu à l'avance, et où while est indispensable.

while est particulièrement utile quand on cherche combien de fois il faut répéter une opération pour atteindre un certain résultat — un nombre qu'on ne peut pas calculer avant de lancer la boucle.

Exercice 5 · Un capital qui augmente

Un capital de 1000 € augmente de 5 % chaque année. Complète ce programme pour savoir au bout de combien d'années il aura dépassé 2000 €.

Éditeur Python — TP4_exo5.py
✎
Une fois ton programme complété et lancé : au bout de combien d'années le capital dépasse-t-il 2000 € ?
La réponse s'affiche directement dans la console de sortie, juste au-dessus.
?
Pourquoi ne peut-on pas remplacer cette boucle par un for i in range(...) avec un nombre de tours écrit directement dans le code ?
Parce qu'une boucle for ne peut pas contenir de calcul avec des décimales
Parce qu'on ne connaît pas à l'avance le nombre d'années nécessaires
Parce que Python interdit les boucles for avec des pourcentages
Exercice 6 · La première puissance de 2 qui dépasse une valeur

Complète ce programme qui cherche la première puissance de 2 strictement supérieure à cible, en doublant à chaque tour.

Éditeur Python — TP4_exo6.py
?
Une fois ton programme lancé (avec cible = 500), que vaut compteur affiché à la fin ?
8
9
10
✎
Si cible = 1000, combien de doublements faut-il en partant de 1 pour dépasser 1000 ?
Reprends le même raisonnement que ci-dessus, mais jusqu'à dépasser 1000.
4
def + while — Combiner fonctions et boucles
›
Objectif n°4

Écrire une fonction qui utilise une boucle while en interne, et qui renvoie un résultat avec return.

On peut tout à fait mettre une boucle while à l'intérieur d'une fonction, exactement comme on l'a fait avec for dans le TP précédent.

Exercice 7 · Observer : compter les chiffres d'un nombre
Rappel : la division entière //. a // b donne le quotient de la division de a par b, sans la partie décimale. Par exemple 17 // 10 vaut 1, et 123 // 10 vaut 12 : on « retire » le dernier chiffre du nombre. C'est pour ça qu'en répétant n = n // 10, on enlève un chiffre à chaque tour, jusqu'à ce qu'il n'en reste plus (n devient 0).

Cette fonction compte le nombre de chiffres d'un entier positif, en le divisant par 10 à chaque tour jusqu'à ce qu'il devienne nul.

  • 1Lis la fonction : que fait n = n // 10 à chaque tour ?
  • 2Lance le programme et vérifie les résultats.
  • 3Ajoute un appel print(nombre_chiffres(0)) — que vaut le résultat, et pourquoi ?
Éditeur Python — TP4_exo7.py
?
Que renvoie nombre_chiffres(0) ?
0
1
Une erreur, car on ne peut pas diviser 0
Exercice 8 · Écrire une fonction : somme des chiffres

Complète cette fonction qui calcule la somme des chiffres d'un entier positif, en t'inspirant de l'exercice précédent.

  • 1n % 10 donne le dernier chiffre de n ; n // 10 retire ce chiffre.
  • 2Complète la condition et les deux lignes manquantes.
Éditeur Python — TP4_exo8.py
?
Pour somme_chiffres(123), que vaut la variable chiffre au premier tour de boucle ?
3
1
123
✎
Que renvoie somme_chiffres(999) ?
Additionne simplement les trois chiffres.
+
Pour aller plus loin (bonus)
›
  • AÉcris une fonction est_premier(n) qui teste, avec un while, si n est divisible par un nombre entre 2 et n−1. Elle renvoie False dès qu'un diviseur est trouvé, True sinon. Teste avec est_premier(9) et est_premier(13).
  • BÉcris une fonction collatz(n) qui compte le nombre d'étapes pour atteindre 1 en appliquant la règle : si n est pair, n = n // 2 ; sinon, n = n * 3 + 1. Teste avec collatz(6).
  • CÉcris une fonction diviseurs(n) qui affiche, avec une boucle while, tous les diviseurs de n entre 1 et n.
Console Python — Défis bonus
# Console libre.
>>>
?
Défi A : que renvoie est_premier(9) ?
True
False
3
✎
Défi B : combien d'étapes faut-il pour que la suite de Collatz atteigne 1 en partant de 6 ?
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 : compte le nombre de flèches.
🏆 Score TP 4 :
0 / 0 validé(s)
🏠