Boucle while
Boucle while
Objectifs cantonaux : O1.6. Semaine dédoublée (×2, groupes A/B séparés).
Cours complet sur la plateforme Runestone de Cédric Donner : Boucle conditionnelle : while.
Jusqu’ici, vous avez toujours connu à l’avance le nombre de répétitions d’une boucle (for _ in range(n)). Il arrive souvent qu’on ne le connaisse pas — par exemple, dessiner une spirale jusqu’à ce qu’un côté dépasse une certaine taille. C’est le rôle de la boucle while (« tant que »).
Syntaxe
◈ Syntaxe — Boucle while
while expression_conditionnelle:
bloc_instructionsÀ chaque itération, Python vérifie la condition :
- Si elle est vraie, Python exécute le bloc et revient vérifier la condition.
- Si elle est fausse, Python n’entre pas (ou plus) dans la boucle et passe à la suite du programme.
Autrement dit, while est une sorte de if qui se répète.
from gturtle import *
def spirale(cote_initial, facteur, cote_max):
cote = cote_initial
while cote < cote_max:
forward(cote)
right(90)
cote *= facteur
speed(10)
spirale(50, 1.2, 250)On ne sait pas à l’avance combien de côtés seront dessinés — cela dépend de la vitesse à laquelle cote grandit. La boucle for ne convient pas ici : il faudrait deviner un nombre de répétitions.
Transformer une boucle for en boucle while
▷ À retenir — Variable de contrôle
N’importe quelle boucle for peut s’écrire avec un while, à condition d’introduire une variable de contrôle (souvent nommée i) qui compte les répétitions déjà effectuées.
# Boucle for
for i in range(5):
print(i, "ième itération (for)")
# Boucle while équivalente
i = 0
while i < 5:
print(i, "ième itération (while)")
i += 1! Boucle infinie
N’oubliez jamais d’incrémenter la variable de contrôle à la fin de la boucle. Sans cela, la condition reste vraie pour toujours et le programme ne s’arrête jamais (boucle infinie — le programme plante ou il faut l’arrêter de force avec le bouton « stop »).
total = 0
n = 1
while n <= 100:
total += n # n n'est jamais incrémenté !
print(total) # cette ligne n'est jamais atteinteVersion corrigée :
total = 0
n = 1
while n <= 100:
total += n
n += 1
print(total)Exercice 1 — spirale octogonale
Développez une commande spirale(angle, cote_initial, decr, cote_min) qui dessine une spirale allant de l’extérieur vers l’intérieur, en utilisant une boucle while (les côtés diminuent tant qu’ils restent plus grands que cote_min).
from gturtle import *
def spirale(angle, cote_initial, decr, cote_min):
...
speed(10)
spirale(360 / 8, 150, 5, 10)Exercice 2 — compte à rebours
Écrivez un programme qui affiche un compte à rebours de 10 à 1 (un nombre par ligne), puis affiche "BOOM!". Utilisez une boucle while, pas for.
! Sortie attendue
10
9
8
7
6
5
4
3
2
1
BOOM!
Exercice 3 — multiples de 9
Écrivez un programme qui affiche tous les multiples de 9 jusqu’à 200 (un multiple par ligne), à l’aide d’une boucle while.
Devoir donné par Cédric
Terminer les exercices sur la boucle while (transformation for → while, spirale, compte à rebours).