3 - Boucle For (pour)
I. de simples répétitions⚓︎
Mon info
Imaginons que l'on souhaite écrire 5 fois « Coucou ». On pourrait le faire avec le programme suivant :
C'est plutôt convenable ici… Mais si on veut effectuer par exemple 1 000 affichages, cela va devenir bien plus fastidieux !
Pour plus d'efficacité, on aimerait indiquer directement que l'on souhaite répéter l'affichage en boucle, de la même manière qu'on pourrait écrire en français :
Répéter 5 fois :
\(\hspace{2em}\) Afficher "Coucou"
En Python, on va écrire le programme ci-dessous.(en anglais "loop" signifie "boucle").
qui va produire cette sortie :
Au lieu de la variable loop, on trouve souvent la variable i. Cela donne :
Prenez garde à ne pas oublier le deux-points : à la fin de la ligne.
À vous de jouer - 1
Votre programme doit écrire 7 fois la phrase : "Je dois respecter le Grand Sorcier.", en plaçant cette phrase exactement une fois sur chaque ligne. Attention, si votre programme n'affiche pas exactement cette phrase avec les points et la majuscule là où il faut, il faudra tout recommencer.
Important : votre programme ne doit pas faire plus de 2 lignes
Erreurs fréquentes
Il est facile de se tromper dans les boucles lorsqu'on n'a pas l'habitude.
- Si on oublie le
:à la fin de la ligne :
SyntaxError: invalid syntax
- Si l'on oublie d'indenter :
SyntaxError: expected an indented block
😊 Face à ce type d'erreur, on pensera donc à vérifier que le deux-points est bien présent et que l'indentation a été faite.
Corrigez l'erreur
Testez puis corrigez la ou les erreurs dans le script suivant :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
II. for i in range(...)⚓︎
Le gourmand insatiable
Bob découvre un beau fraisier....
- Il cueille une fraise et la mange.
- Y prenant goût, il y retourne et cette fois prend 2 fraises.
- N'y tenant plus, il y retourne et prend cette fois 3 fraises.
Et ainsi de suite, à chaque fois, il ne peut pas s'en empêcher, il y retourne. Et à chaque fois il prend une fraise de plus que la fois précédente !
👉 Testez ci-dessous. Quel est le problème ?
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Rectifier le code
Rectifier le contenu de la boucle ci-dessous pour obtenir l'affichage désiré.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Tester for i in range
Tester puis répondre à la questions suivante : Quelles sont les valeurs prises par la variables i lorsqu'on exécute l'instruction
for i in range(10) ?
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
i prend successivement les valeurs 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9.
Cela correspond à 10 valeurs différentes.
Mon info
🖐️ Dans les activités précédentes, vous avez écrit des codes contenant des boucles, servant à répéter des instructions.
Mais la variable, nommée loop ou plus simplement i, n'était pas utilisée dans la boucle.
💡 Quand on veut simplement répéter plusieurs fois un bloc d'instruction, on n'a en effet pas besoin d'utiliser cette variable. Mais dans de très nombreux cas, cette valeur nous est très utile.
À vous de jouer 2
Ecrire un code qui affiche :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Les fraises de Bob
Pour résoudre le problèmes des cueillettes de Bob, nous n'avions en réalité pas besoin de la variable nombre
Tester :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Doit-on toujours démarrer à 0 ?
😊 Non !
Il est possible de modifier cela. Dans l'exemple qui précède, à la première cueillette, il mange 1 fraise. Ce serait donc plus pratique si le compteur i démarrait à 1, non ?
On peut le faire, mais attention à bien conserver 10 itérations....
Tester ci-dessous :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Ce code doit afficher, à chaque cueillette, combien Bob mange de fraises. Mais le code n'est pas correct :
Remarque
Nous avons modifié l'appel de range().
Au lieu de range(10) nous avons écrit range(1, 10).
- au début
iprend la valeur 1 - A la fin
iprend la valeur 9 (comme avant, ça n'a pas changé), et pas à 10, il nous manque donc une cueillette...
Solution : le code correct pour 10 cueillettes
Tester ci-dessous :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Doit-on toujours incrémenter de 1 ?
😊 Non !
Tester ci-dessous :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Modifiez la valeur 55 dans le code ci-dessus, et comprenez ce qu'il se passe :
Essayer par exemple : 51, 52, 54, 49 ...
III. La syntaxe par l'exemple⚓︎
for i in range(n)
Important
Prenez le temps de lire les commentaires !
Cliquez sur les +
-
Le caractère
:est obligatoire aprèsif,elif,else,foretwhile. Il provoque l'indentation automatique du bloc d'instruction qui suit. -
i prend les valeurs entières de l'intervalle [0; 4[
Tester :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
for i in range(a, b)
Important
Prenez le temps de lire les commentaires !
Cliquez sur les +
i prend les valeurs entières de l'intervalle [2; 5[
Tester :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
for i in range(a, b, pas)
Important
Prenez le temps de lire les commentaires !
Cliquez sur les +
i prend les valeurs entières de l'intervalle [1; 10[ avec un pas de 2
Tester :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Parcours par éléments
Important
Prenez le temps de lire les commentaires !
Cliquez sur les +
lettre prend comme valeurs successivement tous les caractères de "NSI"
Tester :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
IV. Exercices⚓︎
Exercice 1
Question 1
Vous devez faire une boucle qui affiche les numéros suivants, Utilise une boucle for i in range(...) avec un seul argument. :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Question 2
Vous devez faire une boucle qui affiche les numéros suivants, Utilise une boucle for i in range(...) avec deux arguments. :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Question 3
Vous devez faire une boucle qui affiche les numéros suivants, Utilise une boucle for i in range(...) avec trois arguments. :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercices 2 à faire sur papier
1. Question 1.
Ecrire un code Python qui affiche les entiers de 0 à 11
2. Question 2.
Ecrire un code Python qui affiche les entiers de 10 à 21
3. Question 3.
Ecrire un code Python qui affiche Les carrés des entiers entre 1 et 10 compris
Exercice 4 : QCM
-
On donne le script suivant :
Que s'affiche-t-il ?
- 15
- 21
- 10
- 0
- Autre
Solution
Ce code fait la somme 0+1+2+3+4+5
Exercice 5
Compléter le code suivant. A la fin la variable somme vaut la somme des entiers de 1 à 100 (compris).
Aucun affichage n'est demandé.
⚠️ N'oubliez surtout pas de valider
après avoir exécuté 
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercice 6
Compléter le code suivant. A la fin la variable produit vaut le produit des entiers de 1 à 10 (compris).
Aucun affichage n'est demandé.
⚠️ N'oubliez surtout pas de valider
après avoir exécuté 
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercice 7
Compléter le code suivant. A la fin la variable somme vaut la somme des carrés des entiers de 1 à 5 (compris).
Aucun affichage n'est demandé.
⚠️ N'oubliez surtout pas de valider
après avoir exécuté 
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercice 8
Ecrire un programme qui provoque l’affichage ci-dessous :

Il y a 20 lignes, et la vingtième contient 20 symboles #
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Astuce
Recopier pour tester :
⚠️ Attention : 0 * "#" n'a pas de sens !
Exercice 9
Alice a déposé ses économies à sa banque sur un compte rémunéré.
Le but de cet exercice est d'écrire un programme qui demande de saisir le capital initial déposé, le taux \(t\) en %, puis calcule le capital final, au bout de 5 ans, sachant qu’il a été placé au taux d’intérêts composé \(t\)%.
1. Le programme doit afficher le capital final au bout de 5 ans.
Astuce
Indication : chaque année le capital est multiplié par \((1+\dfrac{t}{100})\)
Compléter le code ci-dessous :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Solution
2. Recopier, puis adapter ci-dessous le programme pour qu’il affiche le résultat au bout de n années, et non au bout de 5 ans.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Astuce
Indication : il faut une variable supplémentaire n
Solution
3. Recopier, puis adapter votre programme pour qu'il affiche aussi les intérêts acquis au bout de n années.
Astuce
Indication : les intérêts acquis sont la différence entre le capital final au bout de n années et le capital initial.
Vos affichages devront comporter des messages comme par exemple : "Capital au bout de 5 années :"
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
VI. Bilan⚓︎
À retenir ❤
-
La boucle
for ... in ...s'utilise lorsqu'on veut répéter une action un nombre de fois connu à l'avance. On parle de boucle bornée. -
Les instructions répétées peuvent mais ce n'est pas obligatoire faire appel à la variable de boucle, mais il ne faut pas que ces instructions la modifient.
-
Ne pas oublier les
:et l'indentation ! -
range(n)génère une séquence dennombres entiers : on s'en servira dès qu'on aura besoin de répéternfois des instructions.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)