<string>

Répéter du code

Répéter du code

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

La boucle for

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

  • range(a, b, c) génère une séquence allant de a (compris) à b (non compris) par pas de c,
  • range(a, b) si on veut des pas de 1,
  • range(a) si on veut une suite commençant par 0 jusqu'à a (non compris) et avancer par pas de 1.
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:


        
        
Les itérateurs

Les itérateurs

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.


        
        
<string>
La boucle while

La boucle while

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.