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 :

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 !


animation

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 :

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 :

Le J'arrive n'est affiché qu'une seule fois, après que l'on soit sorti de la boucle

  1. Éxécutez le code ci dessus
  2. Modifiez le code ci dessus pour avoir un décompte qui va de 100 à 0 au lieu de 1 à 100
  3. 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.

Schéma de la tour en bois
  • 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.
nbCubes = 0 largeurInitiale = 1 # Mettez ici votre code qui calcule le # nombre de cubes print(nbCubes)

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.