ParcoursOuvrir l'appli

La boucle `while` : répéter tant que

Python, listes et boucles · 45 min

Quand on ne sait pas combien de fois

for est parfait quand on connaît à l'avance ce qu'on parcourt. Mais parfois, on ne sait pas combien de tours il faudra :

epargne = 0
mois = 0
while epargne < 100000:
    epargne += 15000
    mois += 1
print(f"Objectif atteint en {mois} mois")

Déroulé : 15 000 (1 mois), 30 000, 45 000, 60 000, 75 000, 90 000, 105 000 (7 mois). À ce moment, epargne < 100000 devient faux : on sort. Résultat : 7 mois.

Un while ressemble à un if qui se répète : même :, même bloc indenté.

Le danger : la boucle infinie

epargne = 0
while epargne < 100000:
    print("J'économise...")     # on a oublié d'augmenter epargne !

epargne reste à 0 pour toujours, donc la condition reste vraie pour toujours.

Que faire si ça arrive ?

Sortir plus tôt : break et continue

Mot-clé Effet
break sort immédiatement de la boucle, même si la condition est encore vraie
continue saute la fin de l'itération en cours et passe directement à la suivante

Ils marchent dans les while comme dans les for. Par exemple, pour chercher le premier nombre négatif d'une liste et s'arrêter dès qu'on le trouve, break évite de parcourir la suite pour rien.

Exercice : L'objectif d'épargne

Tu économises par_mois FCFA chaque mois. Calcule dans mois le nombre de mois nécessaires pour atteindre au moins objectif. Utilise une boucle while.

Voir une solution
objectif = 100000   # donné
par_mois = 15000    # donné

epargne = 0
mois = 0
while epargne < objectif:
    epargne += par_mois
    mois += 1

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Répare : la boucle infinie

Ce programme devrait afficher 1, 2, 3, 4, 5. Il tourne à l'infini (l'appli va l'arrêter au bout de 6 secondes). Trouve ce qui manque.

Voir une solution
i = 1
while i <= 5:
    print(i)
    i += 1

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Chercher avec `break`

Parcours la liste temperatures avec une boucle for et range dans premiere_canicule la première température supérieure ou égale à 40. Arrête la boucle dès qu'elle est trouvée avec break.

S'il n'y en a aucune, premiere_canicule doit valoir None (la valeur « rien »).

Voir une solution
temperatures = [31, 35, 38, 41, 39, 43]   # donné

premiere_canicule = None
for t in temperatures:
    if t >= 40:
        premiere_canicule = t
        break

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Défi : la suite de Collatz

Partant de n, applique la règle de Collatz jusqu'à atteindre 1. Compte dans etapes le nombre de transformations nécessaires.

Pour 6 : 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1, soit 8 étapes.

Bonus facultatif : affiche aussi chaque nombre de la suite.

Voir une solution
n = 6   # donné

etapes = 0
while n != 1:
    if n % 2 == 0:
        n = n // 2
    else:
        n = 3 * n + 1
    etapes += 1

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Teste-toi

Combien de fois ce code affiche-t-il « Tour » ? python n = 10 while n > 0: print("Tour") n -= 3
  1. 3 fois
  2. 4 fois (bonne réponse)
  3. 10 fois
  4. Une infinité de fois

Au début de chaque tour, n vaut 10, 7, 4, 1 : 4 tours. Ensuite n vaut -2, la condition est fausse, on sort.