Même si apprendre à programmer peut être amusant, vous ne devriez pas passer tout votre temps devant votre ordinateur. Si la pluie tombe, continuez à lire, autrement, sortez et allez jouer ! (Oui, même toi grand-père !)
Amusons nous avec cette phrase qui commence avec si.
Si la pluie tombe,
... continuez à lire,
autrement,
... sortez et allez jouer !
Cela commence à ressembler à un petit programme. Écrivons la comme si c'était un programme en Python.
if il_pleut():
continuer_la_lecture()
else:
sortir_et_jouer()
Vous venez d'apprendre un nouveau mot-clé de Python : else. Donc s'il pleut, continuez à lire ; sinon, vous savez quoi faire !
[NdT : else en anglais = sinon]
En plus de savoir s'il y a une ou plusieurs sonnettes là où il est, Reeborg peut voir s'il y a un mur en face de lui, qui barre son chemin. Il peut aussi tourner la tête à sa gauche ou sa droite pour voir s'il y a un mur là. Vous pouvez lui demander de regarder avec les tests suivants :
front_is_clear() # Vrai si pas de mur en face, Faux autrement
left_is_clear() # Vrai si pas de mur à gauche, Faux autrement
right_is_clear() # Vrai si pas de mur à droite, Faux autrement
Utilisons le premier pour faire explorer son monde à Reeborg. Nous ferons suivre à Reeborg la bordure de son monde en lui demandant d'avancer, s'il n'y a pas de mur en face de lui, et tourner à gauche autrement. Le programme simple suivant est la base de ce dont on a besoin :
if front_is_clear():
move()
else:
turn_left()
turn_off()
Voici le résultat de l'exécution de ce programme simple dans deux situations différentes. Si vous l'essayez, attention à ne pas oublier le deux-points (:) après le mot-clé else.
Maintenant, répétons l'instruction conditionnelle simple plusieurs fois pour que Reeborg fasse le tour de son monde.
def avancer_ou_tourner():
if front_is_clear():
move()
else:
turn_left()
repeat(avancer_ou_tourner, 20)
turn_off()
Cela donne, avec un petit monde, le résultat final suivant :
Nous pouvons rendre cela plus intéressant en faisant faire à Reeborg une "danse" s'il peut avancer, et poser une sonnette s'il doit tourner. C'est justement ce que fait le programme suivant, avec lequel Reeborg fait seulement une partie du tour de son monde :
def danser():
repeat(turn_left, 4)
def avancer_ou_tourner():
if front_is_clear():
danser()
move()
else:
turn_left()
put_beeper()
repeat(avancer_ou_tourner, 18)
turn_off()
Vérifiez que Reeborg transporte assez de sonnettes pour faire son
travail ! Pour donner à Reeborg quelques sonnettes à transporter,
essayez de cliquer sur le bouton Donner des sonnettes .
Notez comment les instructions danser() et move() sont alignées après l'instruction if et indentées par rapport à elle, pour indiquer qu'elles font partie du même bloc d'instructions. Les instructions turn_left() et put_beeper() sont alignées de la même manière, indentées par rapport à l'instruction else à laquelle elles appartiennent. Voici le résultat de l'exécution de ce programme :
Maintenant, voyons ce qui se passe si au lieu d'aligner l'instruction put_beeper() avec turn_left(), nous l'alignons avec l'instruction else, comme ceci :
def danser():
repeat(turn_left, 4)
def avancer_ou_tourner():
if front_is_clear():
danser()
move()
else:
turn_left()
put_beeper()
repeat(avancer_ou_tourner, 18)
turn_off()
À présent, la définition de avancer_ou_tourner() contient un choix if/else entre soit danser puis avancer soit tourner à gauche. L'instruction put_beeper() vient après ce choix et est donc toujours exécutée. Le résultat de l'exécution de ce programme est montré ci-dessous :
Comme vous le voyez, après chaque pas en avant, une sonnette a été posée. Chaque coin a maintenant deux sonnettes : une posée après avoir avancé et une posée après être tourné à gauche.
Maintenant, essayons d'aligner l'instruction put_beeper() avec l'instruction def comme ceci :
def danser():
repeat(turn_left, 4)
def avancer_ou_tourner():
if front_is_clear():
danser()
move()
else:
turn_left()
put_beeper()
repeat(avancer_ou_tourner, 18)
turn_off()
À présent, put_beeper() ne fait plus partie de la définition puisqu'elle n'est pas indentée pour s'aligner avec les autres instructions de la définition. C'est une instruction simple, la première en fait que Reeborg doit exécuter, avant de répéter l'instruction avancer_ou_tourner() 18 fois. Le résultat est le suivant :
Vous voyez donc que les espaces (l'indentation des instructions dans les blocs) donnent des informations importantes à Reeborg. À force de pratique, vous apprendrez à utiliser cela à votre avantage et vous vous rendrez compte que grâce à l'indentation des instructions, Python vous permet d'écrire du code très lisible.
Reeborg est devenu plutôt bon en saut de haies. Il participe maintenant à des courses de différentes longueurs : des sprints courts et de longues courses. Il sait qu'il a atteint la ligne d'arrivée quand il trouve une sonnette. Ci-dessous, vous trouverez deux de ces courses. Les fichiers mondes sont hurdles1.wld et hurdles2.wld.
Supposons qu'aucune course ne dépasse 20 unités de longueur. Définissez une instruction qui ressemble un peu à ceci :
def avancer_sauter_ou_terminer():
if on_beeper(): # fin de course
turn_off()
else:
if front_is_clear(): # pas fini, et pas de haie à sauter
move()
else:
sauter_une_haie()
avec une instruction sauter_une_haie() appropriée, pour que, à part les définitions, la seule instruction que Reeborg ait besoin d'exécuter soit
repeat(avancer_sauter_ou_terminer, 20)
Notez que, dans la définition ci-dessus, le code devient de plus en plus indenté quand nous introduisons des tests de plus.