%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/04_boucle_for\|← Boucle `for`]] | [[Code et Développement/Programmation/Lecture de Code - Python/06_chaines\|Chaînes →]] | > |:---|---:| %% nav-fin %% # Boucle `while` ## Principe La boucle `while` répète un bloc **tant que** la condition est vraie. ```python while condition: # bloc répété ``` La condition est testée **avant** chaque tour. Si elle est fausse dès le départ, le bloc n'est jamais exécuté. --- ## Exemple — compte à rebours **À manipuler :** suivez l'exécution avec l'entrée 5. La ligne 2 teste la condition avant chaque tour. Au dernier passage, n vaut 0 : le test est faux et la boucle s'arrête. ```sq-trace n = int(input()) # entrée : 5 while n > 0: print(n) n = n - 1 --- 1 | n = 5 | 2 | | 3 | | 5 4 | n = 4 | 2 | | 3 | | 4 4 | n = 3 | 2 | | 3 | | 3 4 | n = 2 | 2 | | 3 | | 2 4 | n = 1 | 2 | | 3 | | 1 4 | n = 0 | 2 | | ``` **Sortie** : 5, 4, 3, 2, 1, un nombre par ligne. --- ## Pattern classique — extraction de chiffres `n % 10` donne le dernier chiffre de `n`. `n // 10` retire ce chiffre. **À manipuler :** suivez l'exécution avec l'entrée 123. ```sq-trace n = int(input()) # entrée : 123 while n > 0: print(n % 10) # dernier chiffre n = n // 10 # retire le dernier chiffre --- 1 | n = 123 | 2 | | 3 | | 3 4 | n = 12 | 2 | | 3 | | 2 4 | n = 1 | 2 | | 3 | | 1 4 | n = 0 | 2 | | ``` **Sortie** : 3, 2, 1, un chiffre par ligne. --- ## `while` vs `for` | | `for` | `while` | |---|---|---| | Quand utiliser | nombre de tours connu | condition de sortie variable | | Risque | aucun | boucle infinie si condition jamais fausse | | Typique | parcours de séquence | algorithme itératif | --- ## Pièges fréquents - **Boucle infinie** : si la variable de la condition ne change jamais, la boucle ne s'arrête pas. ```python n = 5 while n > 0: print(n) # n n'est jamais modifié : boucle infinie ``` - **Condition jamais vraie** : si la condition est fausse dès le départ, le bloc n'est jamais exécuté (contrairement à `do…while` dans d'autres langages). - **Décalage de un** : `while n > 0` s'arrête quand `n` vaut 0. Le tour avec `n = 0` n'est pas exécuté. - **Modification de la mauvaise variable** : si la condition porte sur `x` mais que la boucle modifie `y`, la boucle ne converge pas. ## À vous **À manipuler :** prédisez la sortie. ```sq-affiche n = 1 while n < 20: n = n * 3 print(n) --- réponse: 27 explication: n vaut 1, 3, 9, puis 27. 27 < 20 est faux : la boucle s'arrête et le programme affiche 27. ``` ```sq-affiche n = int(input()) compte = 0 while n > 1: n = n // 2 compte += 1 print(compte) --- entrée: 20 réponse: 4 explication: n vaut 20, 10, 5, 2, puis 1. La boucle fait 4 tours. ``` %% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/04_boucle_for\|← Boucle `for`]] | [[Code et Développement/Programmation/Lecture de Code - Python/06_chaines\|Chaînes →]] | > |:---|---:| %% nav-fin %%