Programmer en Python en 2nde

Boucle inconditionnelle : for

Crédits

Toute la structure html/css/js et une partie du contenu ont été réalisés par Nicolas Buyle-Bodin professeur au lycée Lacassagne, avec l'aide de Jean-Manuel Mény, professeur au lycée de la plaine de l'Ain. Ils ont travaillé pendant plusieurs centaines d'heures pour créer un site de formation à destination des enseignants du secondaire de l'académie de Lyon d'une grande qualité visible sur le portail Mathématiques du site académique. Ils ont eu la gentillesse de placer leur code source sous licence Creative Commons BY-NC-SA Respect de la Paternité - Pas d'utilisation commerciale - Partage des conditions initiales à l'identique..

Nous les en remercions chaleureusement.

Pour ...

Boucle for avec range

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.

Boucle for sur des itérables

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 !")