32. Nombreux retours

Comme vous le savez, Reeborg n'est pas vraiment en pleine forme. Il peut tourner seulement à gauche, il a une fuite d'huile, il peut voir les murs seulement quand ils sont juste à côté de lui et entendre les sonnettes seulement quand il est littéralement debout sur elles. Reeborg a aussi une boussole (un peu cassée) qu'il peut utiliser pour savoir s'il est face au nord... ou pas. Pour savoir s'il est face au nord, vous pouvez demander à Reeborg de faire le test facing_north().


Essayez !

Écrivez un programme court qui assure que Reeborg va tourner à gauche jusqu'à ce qu'il soit face au nord et alors s'éteint, quelle que soit son orientation de départ.


Obtention de résultats d'une fonction

Les tests que Reeborg effectue sont en réalité des fonctions en Python. Le résultat de ces fonctions n'est pas d'afficher une valeur, comme nous l'avons vu jusqu'ici, mais plutôt d'obtenir une réponse (vrai ou faux dans ce cas) qui peut être utilisée par la suite. Pour faire quelque chose de semblable nous-mêmes, nous devons utiliser le mot-clé Python return. Voici un exemple :

>>> def additionner(a, b):
... reponse = a + b
... return reponse
...
>>> c = additionner(4, 5)
>>> print c
9
>>> # Nous pouvons afficher directement la sortie de la fonction.
>>> print additionner(1, 1)
2

Dans l'exemple ci-dessus, nous aurions pu définir la fonction additionner() avec une ligne de code en moins, comme suit :

>>> def additionner(a, b):
... return a + b
...
>>> c = additionner(4, 5)
>>> print c
9

Donc return peut "retourner" le résultat de toute expression en Python valide, pas seulement la valeur d'une variable. Si l'expression que vous voulez "retourner" est courte, vous pourrez ne pas vouloir utiliser une variable supplémentaire (comme réponse ci-dessus). Cependant, comme vous le verrez plus tard, vous pouvez parfois "retourner" plus qu'une seule variable... Alors, il pourra être plus facile à lire d'utiliser des noms de variables au lieu d'expressions en Python.


Retour au monde de Reeborg

Comme nous l'avons dit au début de cette leçon, Reeborg a une boussole cassée. Pour cette raison, il sait seulement directement s'il est face au nord ou s'il ne l'est pas. Cependant, maintenant que nous savons que Reeborg peut se souvenir des choses, nous pouvons lui apprendre à trouver à quelle direction il fait face. Par exemple :

# facing south = face au sud 
def facing_south():
turn_left()
turn_left()
reponse = facing_north()
turn_left()
turn_left()
return reponse

Voyons comment cela fonctionne en examinant deux cas :

Ainsi, nous pouvons utiliser notre nouveau test si nous voulons que Reeborg soit face au sud :

while not facing_south():
turn_left()

Mini-quiz

Écrivez un programme qui oriente Reeborg face à l'ouest, quelle que soit son orientation de départ. Essayez-le avec toutes les orientations de départ possibles.


Mini-quiz 2

Placez Reeborg à n'importe quel endroit, face à n'importe quelle direction dans un monde vide. Écrivez un programme qui commande à Reeborg de revenir à l'origine, sa position de départ habituelle, face à l'est. Le même programme devra fonctionner quelle que soit la position et l'orientation de départ.

previousLa globalisation est une mauvaise chose - home - repeat() cache quelques mots-clésnext