La boucle 'tant que' en langage Python

Le retour du robot: la technique du compteur

Comment cela fonctionne

La mise au point de notre robot avance bien. Le problème de l'alimentation énergétique est résolu. Il ne faut plus s'en préoccuper: le robot dispose d'une source d'énergie illimitée.

Le robot est maintenant capable de comprendre l'instruction "Avancer d'un pas". Comment allons-nous nous y prendre pour le faire avancer de 50 pas?

Tout bête: il suffit de lui donner le nombre de cacahuètes suffisantes pour faire juste 50 pas.

Je crains que vous ne soyez pas assez attentif: il est précisé plus haut que le robot dispose d'une source d'énergie illimitée. Il faut trouver autre chose.

Une stratégie simple serait de passer par une structure du type

Tant que <on n'a pas fait 50 pas>
   Avancer d'un pas

ardoiseAh oui, et on lui fait compter ses pas comment? On l'équipe d'une bonne vieille ardoise et d'une craie?

Mais vous n'êtes pas tellement loin de la vraie solution. Le robot va effectivement compter ses pas.

On arrive donc à une structure du type:

Tant que <il y a moins de 50 traits sur l'ardoise>
   Avancer d'un pas
   Ajouter un trait sur l'ardoise

Vous savez, j'y crois à moitié, à votre affaire d'ardoise.

Dans ce cas, voyons comment nous pouvons résoudre le problème de manière plus rigoureusement informatique.

On remplace l'ardoise par une variable. A chaque tour de boucle, on ajoute "1" à cette variable. Appelons-la NombreDePas.

Tant que <NombreDePas < 50>
   Avancer d'un pas
   Ajouter "1" à la valeur de la variable

Cette dernière expression s'écrit selon une forme qui peut paraître étonnante au premier abord:

Tant que <NombreDePas < 50>
   Avancer d'un pas
   NombreDePas <- NombreDePas + 1

où le symbole "<-" signifie "reçoit":

NombreDePas reçoit NombreDePas + 1

Bon, nous avons l'expression logique et le corps de la boucle. Mais rien à propos de l'initialisation. Je suis perplexe.

Et vous avez raison, car l'initialisation est extrêmement importante ici.

Il est extrêment risqué de faire appel au contenu d'une variable dans laquelle on n'a jamais déposé de valeur. 

La variable peut simplement ne pas exister (cas du langage Python) ou avoir une valeur aléatoire (cas du langage Pascal) ou valoir "0" (cas du langage Basic).

Nous allons fixer la valeur de la variable pour être sûr de maîtriser la situation.

NombreDePas <- 0

Tant que <NombreDePas < 50>
   Avancer d'un pas
   NombreDePas <- NombreDePas + 1

En langage Python

La traduction de l'algorithme précédent en langage Python pourrait être:

#!/usr/bin/env python
# *-* encoding: ISO-8859-1 -*-

NombreDePas = 0
while NombreDePas < 50 :
    print "j'ai déjà fait ", NombreDePas, "pas"
    NombreDePas = NombreDePas+ 1
    print "et j'avance"

print "---------------"
print "ouf, j'y suis"

  • L'expression "Tant que" se traduit naturellement "while"
  • L'expression logique "NombreDePas < 50" est suivie d'un signe ":" qui annonce que l'instruction se poursuit à la ligne suivante
  • Le bloc d'instruction du corps de boucle est indenté vers la droite
  • Teste le programme ci-dessus.
  • Vérifie que tu comprends bien la différence entre les instructions notées en rouge ci-dessus et les deux dernières instructions du programme notées en couleur bleue.
  • Comment faut-il modifier le programme pour que le robot annonce, à chaque tour de boucle, la distance qu'il a déjà parcourue, sachant qu'un pas de robot mesure 0,43 mètre?
  • Peux-tu prévoir ce qui va se passer si l'on oublie la ligne du programme où la valeur du compteur est augmentée d'une unité?
  • Comment faut-il modifier le programme pour que l'expression logique soit "le nombre de pas effectués n'est pas 50" ?
  • Enregistre le programme modifié sous le nom avanceParPas.py.

Quand tu as exécuté le programme et bien compris son fonctionnement, passe à la page suivante. Vers la page suivante Page suivante


Dernière modification 18/08/2016 Test dans /info ...