Répéter sans se fatiguer avec les boucles

Précédemment, nous avons commencé à prendre en main processing en découvrant quelques instructions permettant de dessiner des formes géométriques (point, line, rect, ellipse) avec différentes couleurs (composantes R, V et B) pour leur contour (stroke) ou leur surface (fill). Maintenant, nous allons découvrir deux nouveaux outils fantastiques qui vont nous permettre de créer des oeuvres plus facilement et rapidement. En effet, pour l'instant nous sommes obligés d'expliquer à l'ordinateur le dessin de chaque élément individuellement.

Par exemple, si l'on souhaite créer une suite de 9 cercles, nous devons appeler 9 fois l'instruction ellipse avec les bonnes informations pour obtenir le dessin souhaité. On peut le faire ainsi, mais c'est un peu laborieux, surtout si l'on souhaite augmenter le nombre de cercles, en passant à 10 ou pire encore 100 !

Observez-bien les colonnes de nombres de la séquence d'instructions ellipse … ne remarquez-vous rien de particulier ?

Effectivement, les 3 derniers nombres sont toujours identiques ! Cela s'explique car le premier (100) correspond à la coordonnées de ligne qui reste toujours la même puisque les cercles sont alignés, et que les deux suivants (30) correspondent aux deux rayons de l'ellipse (et toutes les ellipses sont identiques).

Par contre, le premier nombre change à chaque instruction puisque cela correspond à la coordonnée de colonne du centre du cercle. Examinons de plus prêt cette suite de nombres: 10, 40, 70, 100, 130, 160, 190, 220, 250. Ne trouvez-vous pas une certaine régularité dans cette suite de nombres ?

Nous sommes dans une situation typique où l'on répète un même traitement ! En effet, on effectue *presque* toujours la même instruction ellipse(x, 100, 30, 30) avec x qui évolue de 30 en 30 (on dit aussi par pas de 30), en commençant à 10 et en s'arrêtant à 250 :)

Ce type de situation est tellement récurrent que l'on a un outil particulier pour faciliter l'écriture d'un traitement qui se répète plusieurs fois à l'identique ou presque, c'est ce que l'on appelle les répétitions (et parfois les boucles).

Vive les boucles !

L'avantage d'un ordinateur c'est que contrairement à nous, il ne se lasse pas de refaire plusieurs fois la même chose :) Exploitons cela pour trouver une solution plus simple pour dessiner nos 9 cercles identiques (à leur placement près). Comme nous l'avons vu, la coordonnée de colonne x est la seule à varier en augmentant de 30 lors du dessin de chaque cercle. En python (c'est le nom du langage de programmation que nous utilisons !), il existe une instruction permettant de construire facilement une suite de nombres correspondant à celle que nous avons identifiée : range. Cette instruction signifie intervalle et permet de construire une suite de nombres dans un intervalle donné. Ainsi, si l'on souhaite créer la suite: 10, 40, 70, 100, 130, 160, 190, 220, 250, on peut le faire avec cette expression: range(10, 280, 30) qui signifie compte de 10 à 280 en augmentant de 30 à chaque fois. Pourquoi 280 au lieu de 250 ? Car la borne de fin est exclue… Du coup, comme nous voulons 250, il faut mettre un nombre strictement plus grand que 250 (changez le 280 en 251 pour vérifier cela !).

Après l'instruction print, les instructions ci-dessous sont en commentaires. Enlevez le # et lancez le programme pour voir ce qu'il se produit.

  for x in range(10, 280, 30):
    ellipse(x, 100, 30, 30)
    

L'instruction for est ce qui permet de définir des traitements répétitifs : toutes les instructions légèrement décalées vers la droite vont être répétées autant de fois qu'il y a de nombres dans la suite de nombres créée par range (donc 9 fois dans ce cas). Et comme les affichages le démontrent, le symbole x va prendre successivement les valeurs de la suite. Ce x est en fait une variable, c'est-à-dire une information qui a un nom. Si l'on utilise ce nom dans notre programme, on accède directement à sa valeur. Ainsi, print(x) signifie affiche la valeur que contient la variable x.

Nous avons maintenant tous les outils nous permettant de dessiner nos 9 cercles sans trop nous fatiguer (en tout cas au niveau des doigts parce que pour les méninges ;))