%% 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 %%