Les boucles "pour"

Les boucles "POUR"

Une boucle "pour" sert à répéter une action. Rappelons brièvement la principale différence entre une boucle "pour" et une boucle "tant que" (dont nous donnerons la syntaxe à un autre moment) :

  • Avec une boucle "pour", on connaît à l'avance le nombre de répétitions de l'action à exécuter.
  • Avec une boucle "tant que", le nombre de répétitions est conditionné par l'évolution de l'état de certaines variables du programme.

Un premier exemple

La table de multiplication du 8.

		 
		Pour k allant de 1 à 10 :
		    afficher k*8
		
		

for k in range(1,11) :
	print(k, "* 8 = ",k*8)
  • L'indentation après la ligne for ... : est obligatoire (et automatique avec un éditeur adapté) : elle permet de délimiter la portée du for.
  • a et b désignant deux entiers, range(a,b) est l'ensemble (ordonné) des entiers a, a+1, a+2, ..., b-1. C'est à dire l'ensemble des entiers k vérifiant a≤ k <b. On fera attention à l'apparente dissymétrie entre les deux bornes.

L'affichage obtenu :

1 * 8 =  8
2 * 8 =  16
3 * 8 =  24
4 * 8 =  32
5 * 8 =  40
6 * 8 =  48
7 * 8 =  56
8 * 8 =  64
9 * 8 =  72
10 * 8 =  80

Variantes sur le premier exemple

Les variantes présentées ici portent sur l'affichage du résultat et non sur la compréhension d'une boucle for. Vous pouvez donc sauter ce paragraphe en première lecture. Savoir comment améliorer simplement les affichages vous sera toutefois rapidement utile.

Variante de syntaxe : utilisation de la méthode format.


for k in range(1,11) :
    print("{} * 8 = {} ".format(k, k*8))

La première accolade sera remplacée par la valeur du premier argument de la méthode format (il s'agit donc ici de la valeur de k). La seconde accolade, suivant la même logique, sera remplacée par la valeur de k*8 dans les affichages.

On peut aussi vouloir améliorer l'alignement. Testez ceci :


for k in range(1,11) :
    print("{:2d} * 8 = {:2d} ".format(k, k*8))

Le code ajouté dans les accolades permet d'écrire chaque entier sur une longueur de deux caractères.

On obtient :

 1 * 8 =  8 
 2 * 8 = 16 
 3 * 8 = 24 
 4 * 8 = 32 
 5 * 8 = 40 
 6 * 8 = 48 
 7 * 8 = 56 
 8 * 8 = 64 
 9 * 8 = 72 
10 * 8 = 80

Pour en savoir plus sur les options d'alignement : "mini-langage" de la méthode format (autre source : Pyformat).

Si l'on préfère par exemple aligner les écritures de nos entiers sur la gauche :


for k in range(1,11) :
    print("{:<2d} * 8 = {:<2d} ".format(k, k*8))

ce qui donne :

1  * 8 = 8  
2  * 8 = 16 
3  * 8 = 24 
4  * 8 = 32 
5  * 8 = 40 
6  * 8 = 48 
7  * 8 = 56 
8  * 8 = 64 
9  * 8 = 72 
10 * 8 = 80

Un second exemple

Calcul de la somme des premiers entiers naturels.

Calcul de la somme S=1+2+3+...+n des n premiers entiers strictement positifs :


n = 15 
s = 0 # initialisation de la variable s qui contiendra la somme
for j in range(1,n+1) :
	s = s+j
print("La somme des entiers compris entre 1 et {} est égale à {}.".format(n,s) )

On obtient :

La somme des entiers compris entre 1 et 15 est égale à 120.

Pour bien saisir le rôle de l'indentation, écrivons dans ce dernier programme l'instruction print en l'indentant de la même façon que l'instruction s = s+j :


n = 15 
s = 0 # initialisation de la variable s qui contiendra la somme
for j in range(1,n+1) :
	s = s+j
	print("La somme des entiers compris entre 1 et {} est égale à {}.".format(n,s) )

On obtient cette fois :

La somme des entiers compris entre 1 et 15 est égale à 1.
La somme des entiers compris entre 1 et 15 est égale à 3.
La somme des entiers compris entre 1 et 15 est égale à 6.
La somme des entiers compris entre 1 et 15 est égale à 10.
La somme des entiers compris entre 1 et 15 est égale à 15.
La somme des entiers compris entre 1 et 15 est égale à 21.
La somme des entiers compris entre 1 et 15 est égale à 28.
La somme des entiers compris entre 1 et 15 est égale à 36.
La somme des entiers compris entre 1 et 15 est égale à 45.
La somme des entiers compris entre 1 et 15 est égale à 55.
La somme des entiers compris entre 1 et 15 est égale à 66.
La somme des entiers compris entre 1 et 15 est égale à 78.
La somme des entiers compris entre 1 et 15 est égale à 91.
La somme des entiers compris entre 1 et 15 est égale à 105.
La somme des entiers compris entre 1 et 15 est égale à 120.

Les messages obtenus lors de ce dernier affichage n'étant pas exacts, modifions notre programme (on remplace simplement n par j dans format(n,s)) :


n = 15 
s = 0 # initialisation de la variable s qui contiendra la somme
for j in range(1,n+1) :
	s = s+j
	print("La somme des entiers compris entre 1 et {} est égale à {}.".format(j,s) )

On obtient cette fois :

La somme des entiers compris entre 1 et 1 est égale à 1.
La somme des entiers compris entre 1 et 2 est égale à 3.
La somme des entiers compris entre 1 et 3 est égale à 6.
La somme des entiers compris entre 1 et 4 est égale à 10.
La somme des entiers compris entre 1 et 5 est égale à 15.
La somme des entiers compris entre 1 et 6 est égale à 21.
La somme des entiers compris entre 1 et 7 est égale à 28.
La somme des entiers compris entre 1 et 8 est égale à 36.
La somme des entiers compris entre 1 et 9 est égale à 45.
La somme des entiers compris entre 1 et 10 est égale à 55.
La somme des entiers compris entre 1 et 11 est égale à 66.
La somme des entiers compris entre 1 et 12 est égale à 78.
La somme des entiers compris entre 1 et 13 est égale à 91.
La somme des entiers compris entre 1 et 14 est égale à 105.
La somme des entiers compris entre 1 et 15 est égale à 120.

Les boucles avec pas.

Comment afficher les entiers pairs entre 2 et 20 ?

Le plus simple est d'utiliser range(a,b,p) qui permet de parcourir les valeurs supérieures ou égales à a et strictement inférieures à b de p en p : a, a+p, a+2p, a+3p, ...


for k in range(2,21,2) :
	print(k)

On obtient :

2
4
6
8
10
12
14
16
18
20

Les boucles avec pas négatif.

Comment afficher les entiers en ordre décroissant ?

Le plus simple est d'utiliser range(a,b,p) avec une valeur négative du pas p.


for i in range(15,0,-1) :
	print(i)

On obtient :

15
14
13
12
11
10
9
8
7
6
5
4
3
2
1