Une boucle inconditionnelle permet de répéter un bloc d'instructions lorsqu'on connaît à l'avance le nombre de répétitions.
Une situation courante est :
Pour k allant de 1 à 10 répéter
Bloc d'instructions
FinPour
Sa traduction en Python est :
# flux parent
for k in range(1, 11):
# bloc d'instructions
# retour au flux parent
On remarque l'utilisation range(1, 11)
alors qu'on attendrait range(1, 10)
.
En fait range(1, 11)
retourne un itérateur, qui va parcourir avec un incrément de 1 tous les entiers $k$ tels que $1 \leqslant k < 11$.
Il faut bien se souvenir que la borne supérieure de range(n, m)
est exclue mais il est facile de retenir que le nombre de tours de boucles est $m - n$.
S'il s'agit juste de répéter n
fois un bloc d'instructions on utilise le raccourci range(n)
au lieu de range(0, n)
ou de range(1, n + 1)
.
Par exemple pour dire 100 fois "Merci", on peut écrire :
for k in range(100):
print("Merci !")
print("Ouf!")
La fonction range offre un troisième paramètre optionnel qui permet de changer l'incrément par défaut qui est 1.
Par exemple, pour calculer la somme des tous les entiers pairs consécutifs entre 100 et 200, on peut écrire :
sommePair = 0
for k in range(100, 201, 2):
sommePair = sommePair + k
print("La somme est ", sommePair)
Au passage, on a vu un exemple de bloc d'instruction de boucle qui utilise la variable de boucle.
On peut même utiliser un incrément négatif, par exemple pour énumérer les entiers $n$ tels que $10 \geqslant n > 0$ avec un pas de $-1$ :
print("Je sais compter à l'envers")
for k in range(10, 0, -1):
print(k)
print("J'ai décompté de 10 inclus à 0 exclu.")
Une bonne pratique de programmation est de ne jamais modifier la variable de boucle dans le bloc de boucle, même si avec range
c'est transparent car celui-ci reprend la main à chaque tour pour affecter à la variable de boucle la valeur attendue.
La boucle for
permet aussi de parcourir des objets itérables comme les chaînes de caractères, les listes, les fichiers etc ...
Par exemple pour afficher les caractères consécutifs de la chaîne "Bonjour" avec un caractère par ligne, on peut écrire :
chaine = "Bonjour"
for c in chaine:
print(c)
Autre exemple, pour afficher des messages d'invitation personnalisés :
for nom in ["Jean-Luc", "Emmanuel", "François", "Marine"]:
print("Salut", nom, "je t'invite à mon anniversaire samedi !")