%% 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/03_conditions\|← Conditions]] | [[Code et Développement/Programmation/Lecture de Code - Python/05_boucle_while\|Boucle `while` →]] | > |:---|---:| %% nav-fin %% # Boucle `for` ## Principe La boucle `for` répète un bloc pour chaque élément d'une séquence. ```python for variable in séquence: # bloc répété ``` --- ## `range()` | Syntaxe | Valeurs produites | |---|---| | `range(n)` | 0, 1, 2, …, n−1 | | `range(a, b)` | a, a+1, …, b−1 | | `range(a, b, pas)` | a, a+pas, …, < b | ```python range(5) → 0 1 2 3 4 range(1, 6) → 1 2 3 4 5 range(0, 10, 2) → 0 2 4 6 8 range(5, 0, -1) → 5 4 3 2 1 ``` **À manipuler :** écrivez un appel à `range`, les valeurs produites s'affichent dans l'ordre. ```sq-tranche mode: range expression: range(1, 10, 3) ``` --- ## Parcourir une chaîne ```python s = input() # entrée : abc for c in s: print(c) ``` ``` a b c ``` --- ## Parcourir une liste ```python lst = [10, 20, 30] for x in lst: print(x * 2) ``` ``` 20 40 60 ``` --- ## Accumulateur (pattern classique) ```python n = int(input()) # entrée : 5 total = 0 for i in range(1, n+1): total = total + i print(total) # affiche 15 (1 + 2 + 3 + 4 + 5) ``` --- ## Exemple complet — table de multiplication ```python n = int(input()) # entrée : 3 for i in range(1, 6): print(n, "x", i, "=", n * i) ``` ``` 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 ``` --- ## Pièges fréquents - **`range(n)` commence à 0** : `range(3)` donne 0, 1, 2, et non 1, 2, 3. Pour compter de 1 à n, écrire `range(1, n+1)`. - **`range(a, b)` s'arrête à b−1** : `range(1, 5)` donne 1, 2, 3, 4. Le 5 est exclu. - **Accumulateur non initialisé** : oublier `total = 0` avant la boucle provoque une `NameError`. - **Variable de boucle écrasée** : modifier `i` à l'intérieur de `for i in range(n)` ne change pas la progression de la boucle. Python réaffecte `i` à chaque tour. - **Boucle vide** : `range(5, 2)` produit une séquence vide (sans message d'erreur). La boucle ne s'exécute jamais. --- ## Boucles imbriquées La boucle interne se termine **entièrement** à chaque tour de la boucle externe. **À manipuler :** suivez l'exécution. Pour chaque valeur de `i`, `j` prend les valeurs 0, 1 et 2. Quand la ligne 2 ne produit plus de valeur, le programme revient à la ligne 1. ```sq-trace for i in range(2): for j in range(3): print(i, j) --- 1 | i = 0 | 2 | j = 0 | 3 | | 0 0 2 | j = 1 | 3 | | 0 1 2 | j = 2 | 3 | | 0 2 2 | | 1 | i = 1 | 2 | j = 0 | 3 | | 1 0 2 | j = 1 | 3 | | 1 1 2 | j = 2 | 3 | | 1 2 2 | | 1 | | ``` ## À vous ```sq-affiche s = '' for i in range(3): s = s + str(i) print(s) --- réponse: 012 explication: range(3) produit 0, 1 et 2 ; chaque tour ajoute le chiffre à la fin de la chaîne s. ``` **À manipuler :** prédisez la sortie. ```sq-affiche total = 0 for i in range(2, 9, 3): total += i print(total) --- réponse: 15 explication: range(2, 9, 3) produit 2, 5 et 8. Leur somme vaut 15. ``` ```sq-affiche for i in range(3): for j in range(i): print(i, j) --- réponse: 1 0\n2 0\n2 1 explication: pour i = 0, range(0) est vide. Pour i = 1, j vaut 0. Pour i = 2, j vaut 0 puis 1. ``` %% 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/03_conditions\|← Conditions]] | [[Code et Développement/Programmation/Lecture de Code - Python/05_boucle_while\|Boucle `while` →]] | > |:---|---:| %% nav-fin %%