31-Boucle For Formation UPO - Python en Classe de Seconde
31-Boucle For Formation UPO - Python en Classe de Seconde
31-Boucle For Formation UPO - Python en Classe de Seconde
Algorithme
1 Pour i allant de 1 à 10:
2 instruction1
3 instruction2
4 instruction3
Python
for _ in range(10) :
instruction1
instruction2
instruction3
Parcours de séquences
En Python, la boucle for permet de parcourir un à un les éléments d'une chaîne de caractères
(séquence de symboles délimitée par des guillemets " ou des apostrophes '). Testez l'exemple ci-dessous
:
Programme en Python
1 for c in "Python" :
2 print(c)
3
Lancer le programme
P
y
t
h
o
n
for et liste
En Python, la boucle for permet de parcourir un à un les éléments d'une liste (séquence de valeurs de
divers types séparées par des virgules et délimitées par des crochets) :
Programme en Python
Lancer le programme
3
8
9
coucou
Des informations complémentaires sur les listes seront données dans la page [Les listes] → [Définition] .
for et tuple
En Python, la boucle for permet de parcourir un à un les éléments d'un tuple (séquence de valeurs de
divers types séparées par des virgules et délimitées par des parenthèses) :
Programme en Python
Lancer le programme
3
8
9
coucou
La différence entre liste et tuple est aussi abordée dans la page [Les listes] → [Définition] .
help(range)
class range(object)
| range(stop) -> range object
| range(start, stop[, step]) -> range object
|
| Return an object that produces a sequence of integers from start (inclusive)
| to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1.
| start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3.
| These are exactly the valid indices for a list of 4 elements.
| When step is given, it specifies the increment (or decrement).
Pour bien comprendre ce que cela signifie et les entiers générés par la fonction range(), exécutez le
programme ci-dessous :
Programme en Python
1 print(list(range(3,8)))
2 print(list(range(8)))
3 print(list(range(3, 20, 3)))
4
Lancer le programme
[3, 4, 5, 6, 7]
[0, 1, 2, 3, 4, 5, 6, 7]
[3, 6, 9, 12, 15, 18]
¤ range(a, b, pas) génère les entiers a, a+pas, a+2*pas, ... en s'arrêtant sur la plus grande valeur
de la forme a+k*pas qui soit strictement inférieure à b.
¤ range(a, b) est équivalent à range(a, b, 1) et génère les entiers a, a+1, a+2, ..., b-1.
¤ range(b) est équivalent à range(0, b, 1) et génère les entiers 0, 1, 2, ..., b-1.
Conséquence
Programme en Python
1 for i in range(10) :
2 print("{}^2 = {}".format(i, i**2))
3
Lancer le programme
0^2 = 0
1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 25
6^2 = 36
7^2 = 49
8^2 = 64
9^2 = 81
On montre ici une petite différence entre deux langages sur un script "pathologique" mais inspiré
d'une réponse d'élève à un contrôle. Cet élève avait a priori "confondu" une boucle while et une
boucle for dans un exercice demandant de calculer une somme : cela l'avait amené à
incrémenter la variable de sa boucle for dans le corps de la boucle.
Cette différence montre, s'il en est besoin, qu'il faut être rigoureux dans la définition d'un pseudo-
langage de présentation des algorithmes (et surtout, ici, qu'il faut éviter les codes
"pathologiques", nécessairement ambigus).
Programme en Python
1 for k in range(1,30) :
2 k += 3
3 print(k)
4
Lancer le programme
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1 <!DOCTYPE html>
2 <html lang="fr">
3 <head>
4 <meta charset="utf-8">
5 <title> for </title>
6 </head>
7 <body>
8
9 <script>
10
11 for(let k = 1; k < 30 ; k++){
12 k += 3;
Valeur de k : 4
Valeur de k : 8
Valeur de k : 12
Valeur de k : 16
Valeur de k : 20
Valeur de k : 24
Valeur de k : 28
Valeur de k : 32
On voit donc qu'une simple boucle for est traitée différemment suivant les langages.
1°/ En Python, l'indice k de la boucle parcourt la « liste » 1, 2, 3, ..., 29. Pour chaque valeur,
k est incrémenté dans la première instruction du corps de la boucle :
¤ k prend la première valeur de la liste 1, 2, 3, ..., 29, c'est à dire 1
puis k prend la valeur 4 avec l'instruction k += 3 du corps de la boucle et est enfin
affiché.
¤ A l'itération suivante : k prend la valeur suivante dans la liste 1, 2, 3, ..., 29, c'est à
dire la valeur 2
puis k devient 5 avec l'instruction k += 3 du corps de la boucle et est affiché.
¤ etc...
Programme en Python
1
2 for k in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,
3 k += 3
4 print(k)
5
Lancer le programme
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1
2 for k in (3, 7, 2, 89, 3, 2) :
3 k += 3
4 print(k)
5
Lancer le programme
6
10
5
92
6
5
On voit avec cet exemple que l'indice k de la boucle n'est pas a priori incrémenté à
chaque tour de boucle : il prend successivement les différentes valeurs de la liste.
2°/ Par contre la boucle for(let k = 1; k < 30; k++) instruction; du langage
Javascript (il en serait de même en langage C par exemple) est équivalente à :
Javascript
1 k = 1;
2 while (k < 30) {
3 instruction;
4 k += 1;
5 }
Javascript
1 for(let k = 1; k < 30 ; k++){
2 k += 3;
3 afficher(k);
4 }
se comporte comme :
Javascript
1 k = 1;
2 while(k < 30) {
3 k += 3;
4 afficher(k);
5 k += 1;
6 }
1 <!DOCTYPE html>
2 <html lang="fr">
3 <head>
4 <meta charset="utf-8">
5 <title> for </title>
6 </head>
7 <body>
8
9 <script>
10 let k = 1;
11 while( k < 30){
12 k += 3;
Valeur de k : 4
Valeur de k : 8
Valeur de k : 12
Valeur de k : 16
Valeur de k : 20
Valeur de k : 24
Valeur de k : 28
Valeur de k : 32
1 <!DOCTYPE html>
2 <html lang="fr">
3 <head>
4 <meta charset="utf-8">
5 <title> for </title>
6 </head>
7 <body>
8
9 <script>
10 liste = [];
11 for( let k = 1; k < 20; k++) {liste.push(k);}
12
Valeur de k : 4
Valeur de k : 5
Valeur de k : 6
Valeur de k : 7
Valeur de k : 8
Valeur de k : 9
Valeur de k : 10
Valeur de k : 11
Valeur de k : 12
Valeur de k : 13
Valeur de k : 14
21 k += 3;
22 document.write("Valeur de k : " + k);
23 document.write('<br>');//passage à la ligne
24 }
25 </script>
26 </body>
27 </html>
Valeur de k : 4
Valeur de k : 5
Valeur de k : 6
Valeur de k : 7