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")

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, Mur, Toile ou Sortie
                // selon ce qui se trouve sur la case devant la fourmi
from laby.global_fr import *
carte = """
o o o
o ↓ x
o o o
"""
Laby(carte=carte)
while regarde() == Mur:
    droite()
ouvre()

La fonction regarde() permet de « regarder » ce qui est devant la fourmi, elle renvoie un objet python décrivant la case que l’on peut comparer à plusieurs variables prédéfinies.

Mur
Vide
Caillou
Mur
Toile
Sortie

On utilise ensuite une boucle while ce qui signifie Tant que

while condition:
    instructions

Signifie : Tant que condition est vraie, on répète les instructions. Dans l’exemple précédent, le programme signifie « Tant que la fourmi regarde un mur, tourner à droite »

Ci-dessous un autre exemple

from laby.global_fr import *
carte = """
o o o
o ↓ x
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)