Les boucles constituent un moyen de répéter un certain nombre de fois des instructions de votre programme. Prenons un exemple simple, même s'il peut sembler un peu fastidieux : écrire un programme affichant la table de multiplication par 7, de 1 * 7 à 10 * 7.
print(" 1 * 7 =", 1 * 7) print(" 2 * 7 =", 2 * 7) print(" 3 * 7 =", 3 * 7) print(" 4 * 7 =", 4 * 7) print(" 5 * 7 =", 5 * 7) print(" 6 * 7 =", 6 * 7) print(" 7 * 7 =", 7 * 7) print(" 8 * 7 =", 8 * 7) print(" 9 * 7 =", 9 * 7) print("10 * 7 =", 10 * 7)
Le code est long alors qu'on se cantonne à 10 éléments, on pourrait vite se retrouver avec des fichiers de plusieurs centaines de lignes qui ne feraient pourtant rien d'intéressant…
Le résultat :
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 8 * 7 = 56 9 * 7 = 63 10 * 7 = 70
Précédemment, vous étiez obligés d'utiliser un compteur afin de modifier les variable sà votre disposition dans votre boucle, avec for vous allez pouvoir le faire plus élégamment.
L'instruction for travaille sur des séquences. Elle est en fait spécialisée dans le parcours d'une séquence de plusieurs données. Retenez juste ça pour le moment, on reviendra sur les séquences par la suite.
La syntaxe de for est :
for element in sequence: # instruction 1 # instruction 2 # ... # instruction N
En attendant que vous voyez les séquences, voilà un petit tuyau pour en générer une: la méthode range
for i in range(1, 11, 2): print(i)
Vous remarquerez ques i prendra la valeur de un élément sur deux se trouvant entre 1 et 11 (non-inclus, attention aux bornes!) et ce sans qu'on doive l'incrémenter nous-même. Voilà de quoi s'assurer plus clair et élégant. Réessayons un exercice sur les boucles avec un for et un range à présent:
On a vu comment répéter une instructions plusieurs fois grâces aux boucles for et while. Il existe une autre manière pour traverser une liste d'éléments, il s'agit de l'itérateur.
Un itérateur nous donne une fontion 'magique' qui nous permet de parcourir une série d'éléments.
>>> x = iter([0, 2, 4]) >>> next(x) 0 >>> next(x) 2 >>> next(x) 4 >>> next(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
Chaque fois qu'on appelle la méthode next, l'itérateur nous donne l'élément suivant. Si il n'y a plus d'élément, il envoie l'exception StopIteration.
La boucle for peut se servir des itérateurs pour donner les éléments un à un tout comme elle se sert de la méthode range. Mais on peut également utiliser une boucle while pour parcourir tous les éléments avec l'itérateur. Vous pouvez exécuter le code suivant et le modifier pour comprendre ce qu'il se passe.
x = iter([0, 1, 2, 3, 4, 5]) a = True while(a): try: print(next(x)) except StopIteration: a = False
Voici un exercice pratique pour comprendre comment l'utiliser.
La boucle suivante se retrouve dans la plupart des autres langages de programmation et porte le même nom. Elle permet de répéter un bloc d'instructions tant qu'une condition est vraie (while signifie « tant que » en anglais).
La syntaxe de while est :
while condition: # instruction 1 # instruction 2 # ... # instruction N
A présent voici un code servant à afficher les tables de multiplications. Dans l'exemple de base il s'agit de la table de 7 mais vous êtes libres de jouer avec.
nb = 7 # On garde la variable contenant le nombre dont on veut la table de multiplication i = 0 # C'est notre variable compteur que nous allons incrémenter dans la boucle while i < 10: # Tant que i est strictement inférieure à 10 print(i + 1, "*", nb, "=", (i + 1) * nb) i += 1 # On incrémente i de 1 à chaque tour de boucle
Vous remarquerez l'utilisation d'une variable qui servira de compteur. Celui-ci permet à la fois d'évaluer l'état d'avancement de la boucle mais aussi dans le cas présent de participer au calcul des valeurs.
A présent, voyons un peu ce que vous avez compris en mettant un peu en pratique:
L'un des plus gros points d'attention repose bien entendu sur la condition employée dans la boucle, en fonction de celle-ci vous pourriez vous retrouver avec !6 au lieu !5 par exemple, il est donc important de prêter attention au moment de la définir.
Un autre point intéressant est qu'avec une bonne condition on peut limiter le nombre d'itérations afin d'arriver à une réponse. Il s'agit clairement de faire de l'optimisation de programme (ce qui n'est clairement pas le focus de ce chapitre mais ça méritait d'être noté).
Réessayez avec l'exercice suivant en tentant de réduire votre nombre d'itérations.