Aller au menu - Aller au contenu

[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)
Auteur : Communauté Pythonienne
Note : Pas de note

Plus d'informations Plus d'informations
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 : Python
1
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.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Boucle ? C'est quoi ce truc ?

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é ;)

Image utilisateur

Ainsi "tant que la variable i n'a pas atteint 10, afficher i" peut se traduire comme ceci en Python :
Code : Python
1
2
3
i=0
while i < 10 :
    print i

Ce qui affiche :
Code : Console
0

0

0

...

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
1
i = i + 1

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 : Python
1
2
3
4
i=0
while i < 10 :
    print i
    i = i + 1

Affichera donc :
Code : Console
0

1

2

3

...

9

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.

Et en pratique, ça se fait comment ?

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 : Python
1
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.

Précisions sur les compteurs

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 : Python
1
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 : Python
1
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 :)

Break, broke, broken

Comme nous venons de le voir, une boucle s'arrête lorsque la condition n'est pas remplie.
Par exemple :
Code : Python
1
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 : Python
1
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 : Python
1
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 ? :D

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 : Python
1
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 ;)

Communication avec l'extérieur

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
1
input()


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 :D ), 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.
Image utilisateur

Par exemple :


Code : Python
1
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
1
print input() + 4

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 : Python
1
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 : Python
1
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)

Ce qu'il faut retenir !


Quelques exercices !


Correction !

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 : Python
1
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 : Python
1
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 : Python
1
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 : Python
1
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

Q.C.M.

Code : Python
1
2
3
a = 25
while a == 25:
        print "a est egal a 25"
Code : Python
1
2
3
4
z = "J'aime les poissons"
while z > 25:
        print "Test"'
        z = z + 1

Est-ce correct ?
Combien de fois la phrase "Hello Maman !" va-t-elle apparaître à l'écran ?

Code : Python
1
2
3
4
5
6
7
8
a = 0
y = 58
z = 5
while a != y or z > a:
    print "Hello Maman !"
    a = a + 1
    y = y + 1
    z = z + 1

Statistiques de réponses au QCM


Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 02/07/2006 à 19:20:11
Modifié : Hier à 18:16:46
Avancement : 95%
Nb de visites : 35246
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 96 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.1101s (0.0975s)