INTRODUCTION |
Nous avons déjà eu un premier contact avec les boucles au travers de la structure repeat qui permet de répéter un bloc d’instructions un nombre déterminé de fois. Il faut cependant savoir que cette structure repeat ne fait pas partie du langage Python standard mais constitue un ajout à l’environnement TigerJython dans un but purement pédagogique. Par contre, la boucle while est à disposition sur toutes les variantes de Python. Une boucle while débute par le mot-clé while suivi d’une condition qui va contrôler la répétition. Les instructions contenues dans le bloc while sont répétées aussi longtemps que la condition reste vérifiée. Une fois cette condition devenue fausse, la boucle s’interrompt et le programme continue normalement avec l’instruction qui suit directement le bloc d’instructions de la boucle.
|
TOILE D’ARAIGNÉE |
from gturtle import * makeTurtle("sprites/spider.png") a = 5 while a < 200: forward(a) right(90) a = a + 2
|
MEMENTO |
Une boucle while est utilisée pour répéter un bloc de programme tant que la condition reste vraie. De ce fait, on pourrait la qualifier comme "condition d'execution". Si on néglige de changer la valeur de la variable contrôlant la condition (ici la variable a), la condition reste toujours vraie et le programme entre dans une boucle infinie sans jamais pouvoir en sortir. Comme cette erreur arrive à tout le monde au début, il faut savoir que l’on peut arrêter un programme bloqué dans une boucle infinie avec le bouton stop ou en fermant la fenêtre de la tortue. En général, les boucles infinies sont dangereuses si l’on n’a aucune d’interrompre le programme. Dans les cas les plus extrêmes, il faut redémarrer l’ordinateur. |
COMBINER DES CONDITIONS AVEC OR |
from gturtle import * def triangle(): repeat 3: forward(100) right(120) makeTurtle() i = 0 while i < 6: if i == 0 or i == 2 or i == 4: setPenColor("red") else: setPenColor("green") fillToPoint(0, 0) triangle() right(60) i = i + 1 |
MEMENTO |
Il faut faire très attention à ce que les indentations des blocs soient correctement ajustées lorsque l’on utilise plusieurs structures de contrôle imbriquées (ici, le if à l’intérieur du while). Comme on le voit dans le précédent programme, il est possible de combiner plusieurs conditions à l’aide de l’opérateur logique OU (or). Une telle condition est vraie si au moins une des conditions combinées est vraie. La fonction fillToPoint(x, y) permet de colorier l’intérieur des formes dessinées par opposition à la fonction fill() permettant de colorier des figures fermées déjà existantes. |
COMBINER DES CONDITIONS AVEC AND |
from gturtle import * makeTurtle() setPos(-200, 30) right(30) fillToHorizontal(0) setPenColor("sienna") nr = 1 while nr <= 10: if nr > 3 and nr < 8: forward(60) right(120) forward(60) left(120) else: forward(30) right(120) forward(30) left(120) nr += 1 |
MEMENTO |
On peut combiner plusieurs conditions à l’aide de l’opérateur logique and. Une telle combinaison de conditions est alors vraie si et seulement si toutes les conditions qui la composent sont vraies. La fonction fillToHorizontal(y) permet de colorier la surface délimitée par la ligne dessinée par la tortue et la droite horizontale passant par les points d’ordonnée y. L’expression nr += 1 est un raccourci pour nr = nr + 1, ce qui a pour effet d’augmenter la variable nr de 1. On dit que l’on incrémente la variable nr de 1. |
INTERRUPTION DE BOUCLES AVEC BREAK |
from gturtle import * def square(sidelength): repeat 4: forward(sidelength) left(90) makeTurtle() hideTurtle() i = 0 while True: if i > 120: break square(i) right(6) i += 2 print("i =", i) |
MEMENTO |
La boucle procède en incrémentant la variable de contrôle i par pas de 2. On utilise le raccourci i += 2 au lieu d’écrire i = i + 2. L’instruction python print permet d’écrire dans la console de TigerJython au bas de l’éditeur. Les chaines de caractères doivent être spécifiées entre guillemets doubles " et les nombres doivent être séparés par des virgules. Un espace sera automatiquement rajouté par print entre le texte et le nombre.Êtes-vous capables d’expliquer pourquoi le programme affiche i = 122 lorsqu’il sort de la boucle ? Le mot-clé continue est rarement utilisé et permet d’interrompre l’exécution courante du bloc tout en reprenant une nouvelle itération après avoir vérifié la condition de la boucle. |
VALIDATION DE SAISIE |
Si l’on demande à l’utilisateur de saisir un nombre compris dans une certaine plage de valeurs, on ne doit pas avoir une confiance aveugle dans ses capacités ou sa volonté de bien se plier à nos exigences. Un programme robuste vérifie la validité des données saisies par l’utilisateur et traite les saisies incorrectes par un message adapté. Ce genre de validation est la plupart du temps effectué dans une boucle while interrompue uniquement lorsque la saisie utilisateur est acceptée. Dans le programme suivant, l’utilisateur doit entrer une des valeurs entières 1, 2 ou 3 afin de choisir la couleur rouge, verte ou jaune du disque plein. from gturtle import * makeTurtle() n = 0 while n < 1 or n > 3: n = inputInt("Enter 1, 2 or 3") if n == 1: setPenColor("red") elif n == 2: setPenColor("green") else: setPenColor("yellow") dot(200) |
EXERCICES |
|