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