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, 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()
Tile(name='wall', char='o')
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
Tile(name='wall', char='o')
Vide
Tile(name='void', char='.')
Caillou
Tile(name='rock', char='r')
PetitCaillou
Tile(name='nrock', char='ŕ')
Toile
Tile(name='web', char='w')
PetiteToile
Tile(name='nweb', char='ẃ')
Sortie
Tile(name='exit', char='x')
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, leouvre()
) 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