Je suis certain que vous avez trouvé la source du problème de la solution présentée lors de la dernière leçon: Reeborg déposait un jeton et, avant même de se déplacer, il vérifiait s’il était arrivé à son but en cherchant pour un jeton qui, évidemment, se trouvait là où il était. Donc, la boucle while n’était jamais exécutée. Voici un programme modifié qui devrait fonctionner:
depose()
avance()
while not objet_ici():
if rien_devant():
avance()
else:
tourne_a_gauche()
À votre tour!
Assurez-vous que votre programme fonctionne avant de poursuivre la lecture.
Essayons de modifier le programme pour qu’il puisse également être une solution pour le monde Autour 2. Sélectionnez donc ce monde et exécuter le programme que vous avez déjà sans le modifier pour voir ce qui arrive.
Note
N’oubliez pas d’inclure
from biblio import tourne_a_droite
Comme vous avez pu le constater en exécutant le programme ci-dessus dans le monde Autour 2, le résultat n’était pas celui désiré: Reeborg prend un raccourci et ne fait pas le tour du monde. Le problème est que nous avions supposé que Reeborg n’ait que deux options: avancer ou tourner à gauche. Nous n’avons pas tenu compte de situations où Reeborg devrait tourner à droite. Donc, ce que Reeborg devrait faire est en premier de vérifier s’il y a un mur à sa droite; si la réponse est non, alors il doit faire un virage à droite pour suivre le mur. La fonction requise pour ceci est rien_a_droite(). Voici un programme modifié qui est une tentative de résoudre le problème.
depose()
avance()
while not objet_ici():
if rien_a_droite():
tourne_a_droite()
elif rien_devant():
avance()
else:
tourne_a_gauche()
À votre tour!
Est-ce que ceci fonctionne? Lisez et analysez soigneusement ce programme puis confirmer votre opinion en l’exécutant. Si vous pouvez pensez à des améliorations à apporter au programme, faites-les avant de passer à la leçon suivante.