15. Pas vrai !?

Supposons que nous voulions que Reeborg continue à marcher jusqu'à ce qu'il trouve une sonnette, et alors s'éteigne. Voici un exemple de position de départ :

arrêter à la sonnette

Une façon de faire cela - en pseudocode - serait :

Si sur une sonnette,
... arrêter ;
autrement,
... continuer à avancer.

En utilisant ce que nous avons déjà vu, nous pouvons traduire cela comme ceci :

if on_beeper():
turn_off()
else:
move()
Ce n'est qu'une partie de la solution puisque nous n'avons pas dit à Reeborg de continuer en recommençant. Ignorons cela pour l'instant. Voyons plutôt le pseudocode équivalent suivant :

Si pas sur une sonnette,
... continuer à avancer;
autrement,
... arrêter.

Alors que nous avons inversé l'ordre de "continuer à avancer" et "arrêter", vous devez être d'accord pour dire que les deux manières sont équivalentes. Le point clé est l'utilisation de la négation pas (not en anglais) après le si dans le deuxième cas. Python permet lui aussi de mettre certains tests à la forme négative comme ceci :
if not on_beeper():
move()
else:
turn_off()

Pour transformer ceci en un programme complet, en utilisant ce que nous avons vu jusqu'à maintenant, nous pourrions avoir besoin de definir une instruction, et ensuite la faire répéter assez souvent pour être sur que Reeborg puisse terminer son travail.

À votre tour

Utilisez le nouveau mot-clé Python not pour réécrire votre programme de saut de haie.


Le temps de désherber et semer

C'est le printemps. Le père de Reeborg a semé des graines dans le jardin pour la récolte d'automne. À certains endroits, deux graines ont commencé à pousser alors qu'à d'autres  endroits aucune n'a germé. L'image ci-dessous montre une situation typique (fichier : harvest4.wld).

désherber

Aidez Reeborg à désherber le jardin, pour qu'il n'y ait aucun endroit avec deux carottes (sonnettes), et re-semer pour qu'il n'y ait aucun endroit sans carottes. La situation finale devrait ressembler à ce qui suit :

désherber

Voici une proposition pour une partie du code :

# introduction du vocabulaire lié au problème
pres_d_une_carotte = on_beeper
planter_une_carotte = put_beeper
enlever_une_carotte = pick_beeper

def une_seule_carotte():
if not pres_d_une_carotte():
planter_une_carotte() # remplacer graine manquante
else:
enlever_une_carotte()
if not pres_d_une_carotte(): # oups !
planter_une_carotte() # nous avions enlevé la seule qu'il y avait

Remarquez que, dans la réalité, ce n'est pas une bonne idée d'enlever des germes et les replanter tout de suite après !

précédent If, else, if, else, .... - début - Tant que suivant