Dans le dernier chapitre, nous avons écrit un programme pour aider Karel à gravir un rebord simple:
Même si le PremierKarel programme ci-dessus montre qu’il est possible d’effectuer le tourner_droite() opération utilisant uniquement les commandes intégrées de Karel, le programme résultant n'est pas particulièrement clair sur le plan conceptuel. Dans votre conception mentale du programme, Karel tourne à droite lorsqu'il atteint le haut du rebord. Le fait que vous devez en utiliser trois tourner_gauche() les commandes pour le faire sont ennuyeuses. Ce serait beaucoup plus simple si vous pouviez simplement dire tourner_droite() et demandez à Karel de comprendre cette commande. Le programme résultant serait non seulement plus court et plus facile à écrire, mais aussi beaucoup plus facile à lire.
Heureusement, le langage de programmation Karel permet de définir de nouvelles commandes simplement en incluant de nouvelles définitions de fonctions. Chaque fois que vous avez une séquence de commandes Karel qui effectue une tâche utile - comme tourner à droite - vous pouvez définir une nouvelle fonction qui exécute cette séquence de commandes. Le format de définition d'une nouvelle fonction Karel est sensiblement le même que la définition de main() dans les exemples précédents, qui est une définition de fonction à part entière. Une définition de fonction typique ressemble à ceci:
def prénom ():
commandes qui composent le corps de la fonction
Dans ce modèle, nom représente le nom que vous avez choisi pour la nouvelle fonction. Pour compléter la définition, tout ce que vous avez à faire est de fournir la séquence de commandes dans les lignes après les deux points, qui sont toutes indentées d'un onglet. Par exemple, vous pouvez définir tourner_droite() comme suit:
def tourner_droite():
tourner_gauche()
tourner_gauche()
tourner_gauche()
De même, vous pouvez définir un nouveau tourner_autour() fonctionne comme ceci:
def tourner_autour():
tourner_gauche()
tourner_gauche()
Vous pouvez utiliser le nom d'une nouvelle fonction comme n'importe quelle commande intégrée de Karel. Par exemple, une fois que vous avez défini tourner_droite() , tu pourrais remplacer les trois tourner_gauche() commandes dans le programme avec un seul appel au tourner_droite() fonction. Voici une mise en œuvre révisée du programme qui utilise tourner_droite() :
Un groupe de commandes suit les deux points : qui sont en retrait, s'appelle un bloc de code . Le corps de votre fonction est un bloc de code. Remarquez comment le contenu d'un bloc de code est mis en retrait d'un onglet. Ceci est important du point de vue fonctionnel car cela permet à Python de savoir quelles lignes de code se trouvent dans un bloc donné.
Vous pouvez définir autant de fonctions que vous le souhaitez. Ils devraient tous être écrits les uns après les autres. Vous ne pouvez pas définir une fonction dans une autre fonction.