La marche militaire

L'une des premières choses que j'ai faite, c'est de dresser mes algoblobs pour les faire marcher tous ensemble. Une dizaine d'algoblobs qui marchent au pas, ça impressionne toujours...

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 !


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


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

  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.

Seconde exercice : on a maintenant à disposition 10 000 cubes. On veut savoir quelle est la largeur maximale que l'on peut atteindre pour notre tour.

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

Nous allons reprendre le code du premier algoblob que nous avons fait naître, lorsqu'il était juste capable de se déplacer et de rebondir. Nous allons le modifier pour que l'on puisse faire marcher plusieurs algoblobs en même temps. L'abscisse de tous les algoblobs sera la même, mais l'ordonnée va varier. Cette fois ci, nous n'allons pas modifier la fonctionupdate mais la fonction draw. En effet, c'est dans cette fonction que l'on va répéter le tracé de nos algoblobs.

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 ?

Utilisez votre éditeur pour faire la marche des algoblobs.

Voilà ! Vous avez réussi à faire une marche des algoblobs. Vous pouvez vous féliciter.