La règle N°3 que nous avons vue dans la leçon précédente est si importante que je sens que je dois la répéter pour vous aider à bien vous en rappeler.
Dans votre dernière solution à l'exercice de livraison du journal, il y avait peut-être encore pas mal de répétitions. Par exemple, la commande turn_left() a dû apparaître trois fois de suite dans la définition de turn_right(). De la même manière, monter_une_marche() a dû apparaître quatre fois dans la définition de monter_quatre_marches(). Ceci semble aller à l'encontre de notre règle qui dicte de ne pas se répéter. Un moyen d'éviter ce genre de répétitions est de demander à Reeborg de répéter des instructions grâce à une commande spéciale.
Pour que Reeborg répète une instruction, nous utilisons la commande
repeat() comme suit :
repeat(nom de l'instruction, nombre de fois)
Remarquez que le nom de l'instruction est le nom sans les
parenthèses () à la fin. Par exemple, nous pouvons écrire :
def turn_right():
repeat(turn_left, 3)
Utilisez repeat() partout où vous pouvez pour écrire une
version plus courte de l'exercice de livraison du journal. Vérifiez
bien que votre nouveau programme fonctionne comme attendu.
Nous terminons cette leçon avec quelques exercices. Respectant le sujet de cette leçon (mais pas le titre !), les deux premiers exercices sont des répétitions de deux exercices de la fin de la leçon sur la construction des murs. Pour les résoudre, vous devez utiliser les nouveaux concepts [def, repeat()] que vous avez vus dans cette leçon et celle d'avant.
Reeborg participe à une course de haies. Écrivez un nouveau programme qui lui fait suivre le chemin indiqué ci-dessous pour atteindre la ligne d'arrivée. Le fichier monde est hurdles1.wld.
Il peut être utile de définir, entre autres une nouvelle instruction, sauter_haie(), qui correspondrait au chemin suivant :
Comparez votre nouvelle solution avec celle d'avant [Vous l'avez bien enregistrée, n'est-ce pas ?]
C'est le temps des récoltes ! Faites cueillir à Reeborg toutes les carottes (représentées par les sonnettes) dans ce jardin. Le fichier monde est harvest1.wld.
Votre programme devrait définir les instructions suivantes :
aller_a_premiere_rangee()
recolter_deux_rangees()
aller_a_droite_vers_prochaine_rangee()
Vous pouvez vouloir découper un peu plus ces instructions. Par exemple, vous pourriez avoir:
def recolter_deux_rangees():
recolter_une_rangee()
aller_a_gauche_vers_prochaine_rangee()
recolter_une_rangee()
avec une définition appropriée pour recolter_une_rangee()
.
Cependant, vous pourriez aussi choisir votre manière de découper les
instructions nécessaires. Avec les trois instructions nécessaires
définies, ma version du programme, sans les définitions, est écrite
(avec toujours quelques répétitions) comme ceci :
aller_a_premiere_rangee()
recolter_deux_rangees()
aller_a_droite_vers_prochaine_rangee()
recolter_deux_rangees()
aller_a_droite_vers_prochaine_rangee()
recolter_deux_rangees()
turn_off()
Encore une fois, comparez votre nouvelle solution avec celle que vous aviez avant pour le problème de la récolte.
C'est encore le temps des récoltes ! Mais cette fois, les rangées dans le jardin ont été plantées en diagonales. Faites cueillir à Reeborg toutes les carottes (représentées par des sonnettes) dans le jardin (voir ci-dessous). Le fichier monde est harvest4.wld.
Comme dans l'exemple précédent, votre programme pourrait définir les instructions suivantes :
aller_a_premiere_rangee()
recolter_deux_rangees()
aller_a_droite_vers_prochaine_rangee()
Ces instructions ne seront pas définies de la même façon qu'avant. Mais une fois que vous avez défini ces instructions, votre programme devrait être écrit de la même façon que l'exemple précédent :
aller_a_premiere_rangee()
recolter_deux_rangees()
aller_a_droite_vers_prochaine_rangee()
recolter_deux_rangees()
aller_a_droite_vers_prochaine_rangee()
recolter_deux_rangees()
turn_off()
Attention à ne pas rentrer dans un mur ! Pensez à l'endroit où vous voulez commencer la récolte, et dans quelle direction vous allez récolter. Vous pouvez tracer un chemin sur une feuille de papier pour vous aider.