[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Programmation
> Python
> Apprenons Python ! > Le début, la base de tout... > Les boucles
> Lecture du tutoriel
Les boucles
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Comment écrire 200 fois "Je ne lance pas de boulettes de papier en classe" sans se fatiguer ?
En utilisant Python pardi !
Mais certainement pas en écrivant 200 fois :
Code : Python1
2
3
4 | print "Je ne lance pas de boulettes de papier en classe"
print "Je ne lance pas de boulettes de papier en classe"
print "Je ne lance pas de boulettes de papier en classe"
...
|
Ça serait lourd, beaucoup trop lourd
En programmation, il est quasimment tout le temps mauvais d'écrire deux fois la même instruction (les programmeurs sont réputés pour être paresseux, non ?). Après avoir vu les tests conditionnels, qui permettent au programme de "choisir" ce qu'il doit faire, voici maintenant de quoi effectuer plusieurs fois les mêmes actions.
Une boucle est une répétition d'instruction qui ne ne s'arrête que quand la condition n'est plus remplie. C'est-à-dire, en termes plus simples, qu'une boucle éxécute et ré-éxécute des instructions à l'infini, jusqu'a ce qu'une condition donnée au départ ne soit plus vraie (c'est un peu comme un if qui se répèterait).
Le mot clef que nous allons employer est "while". Il est, comme if suivi d'une condition qui doit être vraie pour que le code s'exécute, puis de deux points (on appelle cette condition le "paramètre" de la boucle). Et encore une fois, le bloc d'instruction qui suit doit être indenté
Ainsi "tant que la variable i n'a pas atteint 10, afficher i" peut se traduire comme ceci en Python :
Code : Python1
2
3 | i=0
while i < 10 :
print i
|
Ce qui affiche :
Code : Console
Y a t-il un problème ? Pourquoi des 0 sans arrêt ? Python affiche ce qu'on lui demande d'afficher, il n'y a pas de problème : c'est notre code qui est mal conçu. En effet, on vient de créer ce que l'on appelle une boucle infinie, qui demande à Python d'afficher 0 jusqu'à la nuit des temps ! Ce n'est pas franchement intéressant. Si vous voulez que le boucle s'arrête, il faut augmenter la valeur de i à chaque lecture de la boucle - i finira alors par ne plus être inférieur à 10, et la condition ne sera plus remplie. Il suffit d'ajouter
Code : Python
dans le bloc d'instructions pour que i augmente de 1 après chaque affichage de i, jusqu'à ce que i atteigne 10. Ce seuil atteint, la boucle est finie.
Code : Python1
2
3
4 | i=0
while i < 10 :
print i
i = i + 1
|
Affichera donc :
Code : Console
Le code "i = i + 1" s'appelle une incrémentation, on incrémente la variable i de 1. Pour qu'une boucle s'arrête, il faut juste que la condition ne soit plus vérifiée.
Ici quand i atteint 10, i n'est donc plus inférieur à 10, et la boucle s'arrête. Pourquoi est-ce qu'on finit sur un 9 ? Parce que i est incrémenté après l'affichage, et avant le test : i vaut donc 10
avant le test, et la boucle s'arrête également avant l'affichage. Essayez d'intervertir les deux instructions dans le corps de la boucle (le bloc d'instructions), et concluez.
Dans notre exemple d'introduction, il suffirait, pour afficher 200 fois "Je ne lance pas de boulettes de papier en classe", de faire avec une boucle :
Code : Python1
2
3
4 | x = 0 # Creation de la variable "compteur"
while x < 200: # Tant que x est inferieur ou egal a 200
print "Je ne lance pas de boulettes de papier en classe"
x = x + 1 # On incremente x
|
Notez les commentaires. Ils sont précédés un dièse :
#. Quand Python voit un dièse, il ne cherche pas à comprendre ce qui est écrit après, et il passe à la ligne suivante. Ce qui permet de commenter votre code, de préciser ce que vous faites ou encore d'expliquer le pourquoi du comment (ce que j'ai fait ici

).
Vous n'êtes pas obligés d'utiliser une comparaison entre deux objets (ici une variable dont on se sert comme compteur et un nombre qui sert de limite). En fait, vous pouvez utiliser n'importe quelle condition entre le while et les deux points. Tant que cette condition est vraie, la boucle tourne.
Comme nous l'avons vu, dans une boucle, on utilise souvent un "compteur". C'est une variable qui va nous permettre d'arrêter la boucle à un certain moment (quand le compteur a atteint 25, par exemple). Rappelez vous des types : vous ne pouvez pas utiliser une chaîne de caractères pour compteur, car additionner une chaîne et un nombre n'a aucun sens.
Regardez ce bout de code :
Code : Python1
2
3
4 | x = "Je suis un Zer0 !"
while x < 13:
print x
x = x +1
|
Vous avez certainement remarqué (je n'en doute pas

) qu'il y a déjà une faute à la 2ème ligne. En effet, ce code demande à Python de vérifier si la chaîne de caractères "Je suis un Zer0 !" est inférieure à 13 ! Ce qui n'est évidemment pas possible. Ensuite, il affiche x, ce qui ne pose pas de problèmes, mais à la dernière ligne, il demande encore quelque chose d'impossible...
Ce code a tout simplement besoin qu'on lui rajoute un compteur ! C'est ce compteur qui doit être vérifié pour savoir si on continue d'éxécuter la boucle ou pas. C'est donc ce compteur que l'on doit incrémenter.
Ce qui donne :
Code : Python1
2
3
4
5 | x = "Je suis un Zer0 !"
y = 0
while y < 13:
print x
y = y +1
|
Mais les compteurs ne sont pas obligatoires. Vous comprenez bien qu'ici il faut en utiliser un pour compter jusqu'à 13 : tant que y est plus petit que 13, on réaffiche le message, et on ajoute 1 à y (sans ajouter 1, on aurait une boucle infinie). Plus tard, nous aurons des boucles sans compteurs, dont la condition dépend de ce que l'utilisateur entre, et non pas d'une variable qui mesure le nombre de tours
Comme nous venons de le voir, une boucle s'arrête lorsque la condition n'est pas remplie.
Par exemple :
Code : Python1
2
3
4 | a = 2
while a > 1:
print a
a = a + 1
|
Cette boucle continuera à l'infini, car si on incrémente tout le temps a, a sera toujours supérieur à 1.
L'instruction break
Mais il y a un autre moyen de demander à une boucle de s'arrêter : l'instruction
break. Elle "casse" la boucle, elle l'arrête en plein dans son élan, lui coupe l'herbe sous le pied... En gros, on sort de la boucle.
Regardez :
Code : Python1
2
3
4
5
6 | a = 1
while a > 1:
print a
if a == 25:
break
a = a + 1
|
Ici, quand a sera égal à 25, la boucle s'arrêtera.
C'est une façon très simple de stopper une boucle, quand elle n'a pas encore fini son travail, mais qu'on veut quand même qu'elle s'arrête.
Code : Python1
2
3
4
5
6
7 | a = 0
while a < 8:
print a, "est inférieur à 8"
if a == 3:
print "Comme a est egal a 3, j\'arrete cette boucle. Et on ne discute pas !"
break
a =a + 1
|
Facile non ?
Notez quand même qu'il ne sert à rien d'écrire une boucle si grande dans un cas si simple. Puisque notre boucle va de toute façon stopper à 3 avec le break, on peut écrire tout simplement
Code : Python1
2
3
4
5 | a = 0
while a < 3:
print a, "est inférieur à 8"
a = a +1
print "Comme a est égal à 3, j'arrete cette boucle. Et on ne discute pas !"
|
Encore une fois, il est important de savoir ce que votre programme fait avant de l'écrire - cela évite d'écrire du code au hasard, alors qu'on peut faire plus simple
Nous allons maintenant utiliser une fonction nommée
input qui permet de lire ce que l'utilisateur entre au clavier. Elle s'utilise simplement en écrivant son nom dans le programme suivi de deux parenthèses, comme ceci :
Code : Python
Ceci est ce qu'on appelle un
appel de fonction. Nous reviendrons dessus beaucoup plus en détail au fur et à mesure, mais voici en gros comment ça fonctionne :
De façon à ne pas toujours écrire le même code, il est possible en Python comme dans pratiquement tous les langages d'en définir des morceaux, et de leur donner un nom, afin de les réutiliser en écrivant simplement le nom choisi. Les fonctions sont des bouts de code que vous n'avez pas à connaître (sauf si c'est vous qui les écrivez, bien sûr

), qu'on peut considérer comme des tuyaux : on peut "mettre quelque chose à l'intérieur", pour qu'il en "ressorte autre chose". On parle
d'arguments que l'on donne à une fonction et de
valeur de retour que l'on récupère après. Dans un programme, quand Python rencontre un appel de fonction, on peut considérer qu'il laisse le programme en pause à cet endroit, et qu'il va exécuter le code de la fonction en "sautant" directement dedans. On comprend alors le terme "valeur de retour" : c'est une valeur qui est renvoyée
dans le programme lorsque l'on retourne de la fonction à ce programme principal.
En Python (et dans beaucoup de langages), les arguments se passent entre parenthèses. S'il n'y en a pas, on laisse des parenthèses vides. Notez que ce sont ces parenthèses qui précisent que l'on appelle la fonction (c'est à dire que l'on exécute le code qui y est attaché). Sachez aussi que input *peut* prendre en argument une phrase à écrire au moment où elle récupère le texte de l'utilisateur, mais ça n'est pas obligatoire.
Par exemple :
Code : Python1
2 | #!/usr/bin/python
input("Entrez un nombre après ces deux points : ")
|
Code : Console | Entrez un nombre après ces deux points : 4 |
Toutes les fonctions renvoient quelque chose en Python, c'est à dire qu'elles ont toutes un résultat (il peut s'agir d'un mot spécial qui dit "rien", ce que nous verrons plus tard). Pour le récuperer, il suffit de placer l'appel de fonction là où on le souhaite. C'est une expression comme une autre. Par exemple, vous pouvez écrire :
Code : Python
Bien que ça paraisse bizarre, c'est tout à fait valide. Cela veut dire "Ecrit le nombre que l'utilisateur a entré plus 4". Si l'utilisateur a tapé "8" et qu'il a appuyé sur la touche entrée, alors Python récuperera le 8, ajoutera 4 et écrira donc 12.
Nous pouvons également stocker la valeur entrée dans une variable :
Code : Python1
2
3 | print "Veuillez entrer un nombre SVP"
entree = input()
print "Vous avez écrit", entree
|
Voilà qui nous permet de mettre à profit tout ce que nous avons appris :
Code : Python1
2
3
4 | reponse = 0
while reponse != 42:
print "Je ne stopperai pas le programme tant que vous n'aurez pas entré le nombre 42 !"
reponse = input()
|
Analysons ce programme. Tout d'abord, nous créons une variable nommée reponse et nous lui donnons la valeur 0. Nous faisons cela pour la réutiliser tout de suite dans la partie conditionnelle de la boucle : souvenez vous qu'il faut qu'une variable ai été définie pour l'utiliser par la suite. Vous pouvez directement lui donner une valeur retournée par une fonction comme dans l'exemple précédant, ou lui donner une valeur quelconque comme ici.
La boucle s'exécute tant que reponse ne contient pas 42. Et dans cette boucle, nous avons un message et une lecture au clavier. Si la lecture au clavier donne le nombre 42, alors la boucle est finie car reponse n'est plus différente de 42
L'astuce vient du fait que l'on donne une valeur au départ qui n'est pas celle que l'on teste dans la boucle. Si on avait directement écrit reponse = 42, la boucle ne se serait pas exécutée (même pas une seule fois)
- Une boucle effectue des actions plusieurs fois.
- On ajoute les deux points et on indente le bloc d'instructions comme pour les conditions.
- On utilise while. Structure :
Code : Python1
2 | while maCondition:
mesInstrutions_indentees
|
- Si on veut arrêter la boucle quelque part au milieu des instructions (et pas après avoir fait un tour complet), c'est facile, on utilise break. On le couple avec une condition très souvent :
Code : Python1
2
3
4 | while maCondition:
mesInstrutions_indentees
if uneConditionSpeciale:
break
|
- Parfois, on a besoin d'une variable spéciale qui va compteur le nombre de tours de la boucle. Cette variable est appelée "compteur" - vous pouvez lui donner le nom que vous souhaitez, mais son rôle sera toujours de contenir un nombre qui sera modifié à chaque tour.Une boucle ne contient pas obligatoirement un compteur : c'est juste lorsqu'on en a besoin qu'il faut en mettre un
Dans ce cas, on aura surement une boucle de cet aspect :
Code : Python1
2
3 | while conditionAvecCompteur:
mesInstructions_indentees
codePourChangerLeCompteur
|
Avec à la fin un code du type compteur = compteur + 1, etc...
- Faire un programme qui fera tourner une boucle 100 fois. On utilisera un compteur appelé x. Si x est un multiple de 10, alors on affiche x, sinon, on n'affiche rien.
- Faire un programme qui affiche la table de 4.
- Faire un programme qui convertit des euros en livres sterling. Il s'arrêtera à 678 Euros. Il affichera :
Code : Console | X Euros = X livres sterling |
Corrigeons ces 3 exercices
Combinaison de if et de while
Secret (cliquez pour afficher)Dans ce programme, on ne doit afficher x que s'il est égal à 10, 20, 30 ... On doit donc utiliser les conditions.

On pourrait être tenté d'utiliser naïvement plein de 'or' afin de tester si x est égal à l'un de tous les multiples de 10 que l'on peut trouver jusqu'à 100. Voilà ce que ça donne :
Code : Python1
2
3
4
5 | x = 1
while x <= 100:
if x == 10 or x == 20 or x == 30 or x == 40 or x == 50 or x == 60 or x == 70 or x == 80 or x == 90 or x == 100:
print x
x = x + 1
|
Ce n'est pas très beau. Nous pouvons tester une autre façon de faire, qui demande une petite réflexion préalable : si un nombre est un multiple de 10, alors quand on le divise par 10, le reste de la division est 0. Et ça tombe bien, nous avons vu il y'a quelques temps
l'opérateur modulo qui sert justemment à cela. Ainsi, x % 10 = 0 si x vaut 10 ou 20 ou 30, etc...
Code : Python1
2
3
4
5 | x = 1
while x <= 100:
if (x % 10) == 0: # Si x est un multiple de 10
print x
x = x + 1
|
Afficher la table de 4
Secret (cliquez pour afficher)Ici, on va initialiser un compteur que l'on multipliera par 4.
Code : Python1
2
3
4 | compteur = 0
while compteur < 11:
print "4 fois", compteur, "=", compteur * 4
compteur = compteur +1
|
Convertir des euros en livres sterling
Secret (cliquez pour afficher)1 Euro = 0,682831992 livres sterling
Code : Python1
2
3
4
5 | euro = 1
coefficient = 0.682831992
while euro < 679:
print euro, "euro est egal a", euro * coefficient, "livres sterling"
euro = euro + 1
|