On regarde devant soi

On regarde devant soi#

Ici, plus de caillou. La fourmi doit parcourir un long couloir, comment faire ?

from laby.global_fr import *
Laby(niveau="2a")
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 1
----> 1 from laby.global_fr import *
      2 Laby(niveau="2a")

ModuleNotFoundError: No module named 'laby'

Il est bien sûr possible de copier plusieurs fois la commande avance() mais il existe de meilleures solutions.

Ci-dessous, on introduit une nouvelle commande et on vous montre un exemple d’utilisation :

regarde()       # Renvoie Vide, Caillou, PetitCaillou, Mur,
                # Toile, PetiteToile, Sortie, ou Inconnu
                # selon ce qui se trouve sur la case devant la fourmi
from laby.global_fr import *
carte = """
o x o
o ↓ o
o o o
"""
Laby(carte=carte)
regarde()

La fonction regarde() permet de « regarder » ce qui est devant la fourmi, elle renvoie un objet Python décrivant le contenu de la case devant la fourmi. On peut ensuite comparer ce contenu avec plusieurs valeurs prédéfinies :

Mur
Vide
Caillou
PetitCaillou
Toile
PetiteToile
Sortie

On va maintenant utiliser une boucle while (Tant que en anglais) :`

while condition:
    instructions

qui signifie : Tant que condition est vraie, on répète les instructions.

Dans le programme suivant, cela donne «Tant que la fourmi regarde un mur, tourner à droite»:

from laby.global_fr import *
carte = """
o x o
o ↓ o
o o o
"""
Laby(carte=carte)
debut()
while regarde() == Mur:
    droite()
ouvre()

Ci-dessous un autre exemple

from laby.global_fr import *
carte = """
o x o
o ↓ o
o r o
o o o
"""
Laby(carte=carte)
while regarde() != Sortie:
    droite()
ouvre()

Ici le != signifie « est différent de ». Le programme se traduit donc par : « Tant que la fourmi ne regarde pas la porte, tourner à droite. Puis ouvrir la porte. ».

Attention aux détails :

  • on met toujours « : » après la condition

  • les instructions (pour l’instant une seule mais on peut en mettre plusieurs) s’écrivent sous le while en « indentant » le début des lignes avec 4 espaces

  • ce qui est écrit au même nieau que le while (dans l’exemple, le ouvre()) s’exécute quand on est sorti de la boucle

En vous inspirant de ces exemples, résolvez le problème suivant, attention la taille du couloir n’est pas fixée ! Votre programme doit fonctionner dans tous les cas (exécutez plusieurs fois la cellule créant le labyrinthe, votre programme doit continuer de marcher.

from laby.global_fr import *
from random import randint
l = randint(2,20)
carte = "o " + "o " * l + "o\n"
carte+= "o " + "→ " + ". " * (l-1) + "x\n"
carte+= "o " + "o " * l + "o\n"
Laby(carte = carte)
### BEGIN SOLUTION
debut()
while( regarde() == Vide ):
    avance()
ouvre()
### END SOLUTION