31-Boucle For Formation UPO - Python en Classe de Seconde

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 9

Index Général >> Plan de la formation >> Boucle itérateur >> for

Programmer en Python en 2nde

Répétitions avec une boucle


for

Le langage Scratch a permis aux élèves de rencontrer leur première structure de


boucle itérative sous la forme d'une répétition d'instructions. Cette répétition est
généralement traduite par un algorithme de la forme :

Algorithme
1 Pour i allant de 1 à 10:
2 instruction1
3 instruction2
4 instruction3

Un équivalent en Python de cette instruction Scratch :

Python

for _ in range(10) :
instruction1
instruction2
instruction3

Parcours de séquences

boucle for et type string

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

1 for c in [3, 8, 9, "coucou"] :


2 print(c)
3

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

1 for c in (3, 8, 9, "coucou") :


2 print(c)
3

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] .

Usage usuel du for


Pour retrouver l'usage habituel d'une boucle for, on parcourt de même les entiers générés à l'aide de la
fonction range().

Lorsqu'on affiche l'aide sur range() :


Python

help(range)

voici ce qu'on obtient :


Python : affichage après exécution

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

On peut alors facilement élaborer un exemple de boucle usuelle :

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

Pour aller plus loin

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).

1°/ Devinez quel sera le résultat de l'exécution du code ci-dessous :

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

2°/ Et maintenant, un code qui pourrait sembler a priori équivalent en Javascript :

Code HTML à NE PAS modifier - Cliquer pour replier/déplier

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

On peut mieux saisir le principe avec l'exemple suivant :


Programme en Python

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 }

Si bien que notre boucle

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 }

En Javascript, cela donne :


Code HTML à NE PAS modifier - Cliquer pour replier/déplier


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

3°/ Un code Javascript plus proche du code Python :


Code HTML à NE PAS modifier - Cliquer pour replier/déplier

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

ou plus proche encore :

Code HTML à NE PAS modifier - Cliquer pour replier/déplier


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

J.M. Mény & N. Buyle-Bodin Groupe UPO

Vous aimerez peut-être aussi