INTRODUCTION |
Souvent, il est nécessaire de maintenir un compteur dans une structure de répétition. Pour ceci, il faut une variable au sein du bloc de répétition qui change d’une certaine quantité à chaque itération de la boucle. Il est plus simple et naturel de réaliser ceci avec une boucle for qu’avec une boucle while. Pour ce faire, il faut tout d’abord apprendre à connaître la fonction range(). Dans le cas le plus simple, range(n) ne prend qu’un seul paramètre également appelé stop value en anglais et retourne une suite de nombres naturels consécutifs débutant à 0 et se terminant à n-1 compris. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] dans la fenêtre de sortie. Testez cette fonction avec plusieurs valeurs différentes, parmi lesquelles 0 pour bien comprendre son fonctionnement. Remarquez que la valeur 10 ne figure pas dans la liste de nombres retournés. Ce paramètre 10 indique plutôt le nombre d’éléments présents dans la liste générée. |
FAMILLE DE COURBES |
|
MEMENTO |
L’instruction for i in range(n) parcourt les nombres de 0 à n-1, à savoir un total de n nombres en tout. Les points de densification des segments droits forment une courbe de Bézier quadratique. |
RANGE() AVEC DEUX PARAMÈTRES |
Le programme suivant dessine des segments droits avec deux couleurs différentes contrôlées par le compteur d’itération i. Leur point d’origine se trouve sur l’axe des x (y=0) dont l’abscisse varie entre -20 et 20 par pas de 1. L’extrémité de chaque segment est le point (0, 40). from gpanel import * makeGPanel(-20, 20, 0, 40) for i in range(-20, 21): if i < 0: setColor("red") else: setColor("green") line(i, 0, 0, 40) |
MEMENTO |
La boucle for i in range(start, stop) avec les entiers start et stop commence à i = start et se termine à i = stop – 1 en augmentant le compteur d’itérations i d’une unité à chaque itération de la boucle. De ce fait, il faut que start soit inférieur à stop pour que le programme puisse entrer dans la boucle puisque range(start, stop) retourne une liste vide si start >= stop. |
RANGE() AVEC TROIS PARAMÈTRES |
Dans le graphique ci-contre, on voit une pyramide renversée formée de rectangles pleins. Le plus petit rectangle a une largeur de 2 et le plus grand une largeur de 40. Étudiez attentivement le programme ci-dessous permettant de réaliser cette figure : from gpanel import * makeGPanel(0, 40, 0, 40) setColor("red") y = 1 for i in range(2, 41, 2): move(20, y) fillRectangle(i, 1.5) y = y + 2 |
MEMENTO |
La boucle for i in range(start, stop, step)commence avec i = start et se termine avec une valeur inférieure à stop. Le compteur de boucle i est incrémenté de step à chaque itération de la boucle. Il est également possible de choisir des nombres négatifs pour les paramètres start, stop et step. Si step > 0, il faut que start < stop tandis que si step < 0, il faut que start > stop. En effet, si step est négatif, i est réduit de step à chaque itération ; la dernière valeur est alors supérieure à stop. |
BOUCLES FOR IMBRIQUÉES (Moiré) |
from gpanel import * makeGPanel(0, 10, 0, 10) for i in range(11): for k in range(11): line(i, 0, k, 10) delay(50) for i in range(11): for k in range(11): line(0, i, 10, k) delay(50) |
MEMENTO |
Ce programme n’est certainement pas tout simple à comprendre mais il est d’une importance cruciale. Une clé pour le comprendre est de supposer que le compteur i de la boucle extérieure a une valeur constante (initialement 0). La boucle intérieure s’exécute alors avec cette valeur de i en faisant varier k de 0 à 10 non compris, ce qui a pour effet de dessiner les 10 droites issues du point inférieur gauche du carré et aboutissant sur chacun des points équidistants du côté supérieur. Une fois que cette première boucle intérieure est terminée, la boucle extérieure augmente i à 1 pour dessiner les 10 segments issus du point inférieur suivant etc… La fonction delay(deltaT)met le programme en pause durant deltaT millisecondes, ce qui permet d’observer la manière dont le motif émerge progressivement. |
EXERCICES |
|