Tous ensemble !
Pour marcher tous ensemble, il faut juste avoir une dizaine d'algoblobs qui vont avoir des caractéristiques voisines. Si vous regardez l'animation ci dessous (lancez donc le son !), vous constaterez que les algoblobs :
- Ont tous la même abscisse
- Cette abscisse correspond à celle du premier problème de déplacement, avec les tests et les rebonds
- Ont des ordonnées régulièrement réparties
Pour arriver à répéter des opérations de la sorte, on va utiliser la boucle "tant que". Voyons comment elle fonctionne.
Répétez après moi !
La programmation, cela demande de la rigueur. Ce n'est pas une histoire de fabriquant de shampoing. Vous avez vu sur les bouteilles de shampoing ?
Appliquez le shampoing sur cheveux mouillé. Massez le cuir chevelu. Rincez. Répétez l'opération.
Donnez cette suite d'instruction à un algoblob ... il vous frictionnera le cuir chevelu sans cesse jusqu'à ce que la bouteille de shampoing soit vide. Il aurait fallu lui dire répétez l'opération une fois
Professeur CHOM in l'épopée des algoblobs
Pour répéter la même tache plusieurs fois, nous allons utiliser une boucle while
.
Il faudra que nous fassion attention aux éléments suivants :
- Quel est l'état de mon programme au début de ces répétitions
- Qu'est ce qui change au cours de chacune de ces répétitions
- Quant ces répétitions vont elle prendre fin (et vont elle bien prendre fin ?)
l'instruction while
en python répète le bloc d'instruction qu'elle contient
tant que la condition n'est pas réalisée (while en anglais signifie "tant que")
while une_condition_est_vraie :
instruction1
instruction2
instruction3
autre_chose
Très souvent, on trouve une condition d'initialisation avant. Par exemple, voici le décompte d'un joueur de cache-cache. On peut distinguer :
-
l'initialisation avec
compteur = 1
- la condition de prolongation avec
compteur <= 100
- la modification dans la boucle avec
compteur = compteur + 1
Le J'arrive n'est affiché qu'une seule fois, après que l'on soit sorti de la boucle
- Éxécutez le code ci dessus
- Modifiez le code ci dessus pour avoir un décompte qui va de 100 à 0 au lieu de 1 à 100
- Le joueur de cache-cache triche un peu .... au début il compte de 1 en 1, et puis ensuite, quand il arrive à 20, il compte de 2 en 2... modifiez votre code en conséquence.
Une boucle while répète une suite d'opération tant qu'une condition est vérifié
La syntaxe est la suivante :
while une_condition_est_vraie :
instruction1
instruction2
instruction3
Mise en pratique
Vous allez faire l'exercice suivant, inspiré de cet exercice sur les boucles de France IOI
L'objectif est de construire une tour à l'aide de petits cubes en bois, sachant que la forme de cette tour consiste en un ensemble de grands cubes placés les uns au-dessus des autres. La base de la tour est un cube de taille 17×17×17, c'est-à-dire composé de 17×17×17 = 4 913 petits cubes. Sur ce cube est posé un autre cube de taille 15×15×15. Au-dessus de ce dernier se trouve un cube de 13×13×13. La tour continue ainsi jusqu'à atteindre le sommet, qui consiste en un cube de taille 1×1×1. On veut savoir combien il y a de cubes.
- Dans l'éditeur Python ci dessous, compléter avec la fonction while pour écrire le code qui permet de calculer le nombre total de cube.
- On change de problématique. On a à disposition un certain nombre de cubes. Ce nombre
sera demandé à l'utilisateur grâce à un appel à
int(input("Combien avons nous de cubes ?"))
. Votre programme devra donner la largeur maximale que notre tour pourra atteindre.
La marche des algoblobs
Nous allons maintenant passer à nos algoblobs pour les faire marcher de concert
Reprendre le premier programme
Dans un premier temps, vous allez reprendre une variante du squelette du premier programme pour vous entrainer. Recopiez dans votre éditeur le programme ci dessous. Je vous invite à le faire sans faire un copié/ collé. Le but est de comprendre chaque ligne au fur et à mesure que vous recopiez ce programme
Recopiez le code ci dessous dans votre éditeur et vérifiez le en l'éxécutant
from p5 import *
largeur = 500
hauteur = 500
abscisse = 250
ordonnee = 250
rayon = 20
vitesseX = 1
def setup() :
size(largeur,hauteur)
def draw():
global abscisse
global vitesseX
background(0)
abscisse = abscisse + vitesseX
if abscisse > largeur :
abscisse = largeur
vitesseX = -vitesseX
if abscisse < 0 :
abscisse = 0
vitesseX = -vitesseX
circle(abscisse,ordonnee,rayon)
Réfléchir avant d'agir
Pour nos algoblobs, nous voulons en tracer un certain nombre. Ils ont tous la même abscisse. L'ordonnée par contre va varier. On va commencer à 50 pour la première ordonnée, et chaque algoblob sera séparé de ses voisins par 50 pixels.
Il faudra donc répéter le tracé l'algoblob en partant de 50, en ajoutant 50 à chaque fois, et en arrétant lorsque l'on dépasse la hauteur.
Dans le code ci dessus, quels seront les parties à intégrer dans la boucle while
?
Faudra t'il intégrer la modification de l'abscisse ? Les tests ? Le dessin des cercles ?
Utilisez votre éditeur avec p5 pour faire la marche des algoblobs.
Voilà ! Vous avez réussi à faire une marche des algoblobs. Vous pouvez vous féliciter.