Vous rappelez-vous comment, plusieurs leçons auparavant, nous avons demandé à Reeborg de répéter certaines instructions ?
def turn_right():
repeat(turn_left, 3)
Dans cette leçon, nous allons voir comment nous pouvons définir notre propre fonction repeat().
Essayez ce qui suit :
>>> for lettre in "Reeborg":
... print lettre
...
R
e
e
b
o
r
g
Pour (for) chaque lettre qui apparaît dans (in) la chaîne Reeborg, nous demandons à l'interpréteur Python de l'imprimer (print) sur une nouvelle ligne. Si nous ne voulons pas que les lettres soient imprimées sur une nouvelle ligne, mais simplement séparées d'une espace sur la même ligne, nous utiliserons une virgule, comme nous l'avons déjà dit dans une situation différente.
>>> for lettre in "Reeborg":
... print lettre,
...
R e e b o r g
Pas mal ! Cela fonctionnera avec n'importe quelle chaîne ! Et maintenant, si nous voulons plutôt que Python compte avec des nombres ? Nous pourrons également utiliser une boucle for, avec la fonction très utile range()
>>> for nombre in range(3):
... print nombre
...
0
1
2
>>> for nombre in range(14):
... print nombre,
...
0 1 2 3 4 5 6 7 8 9 10 11 12 13
N'hésitez pas à essayer plus d'exemples tout seul !
Nous avons maintenant tous les ingrédients de Python nécessaires pour définir notre propre fonction repeat() :
Qu'est-ce que nous attendons ?
>>> def repeat(f, n):
... for i in range(n):
... f()
...
>>> def f():
... print "C'est amusant !"
...
>>> repeat(f, 3)
C'est amusant !
C'est amusant !
C'est amusant !
En fait, ce que nous venons de faire est de la programmation Python avancée ! Nous avons passé un paramètre à la fonction repeat() qui est lui-même une fonction. Pour cela, nous avons dû mettre le nom de la fonction sans les parenthèses [Revoyez comment nous avions défini turn_right() dans le monde de Reeborg]. Nous avons aussi passé un autre paramètre (n) destiné à être une valeur numérique (pour que range() nous donne ce que nous voulions). Quand nous avons défini la fonction repeat(), Python ne se souciait pas (et ne savait pas !) que l'un des paramètres allait être une fonction et l'autre un nombre.
Notez aussi que les noms de variable que j'ai choisis (f, n, i) ne sont pas très descriptifs. Les programmeurs utilisent souvent des variables à une seule lettre dans les boucles courtes (comme ci-dessus) ou les fonctions courtes où l'on peut voir en une fois toutes les instructions qui utilisent ces variables. Toutefois, si les variables ont une signification particulière, il est toujours préférable de leur donner un nom plus long, plus descriptif. Si vous ne me croyez pas réessayez l'exercice de lecture de la fin de la leçon 10. Évitez absolument les répétitions.
Donc j'aurais peut-être dû définir repeat() comme ceci :
def repeat(fonction, nombre_de_fois):
for nombre in range(nombre_de_fois):
fonction()
Revenez au monde de Reeborg. Choisissez votre exercice favori, pourvu que ce soit l'un de ceux où vous avez utilisé repeat() au moins deux fois dans votre solution. Remplacez repeat() partout dans votre solution par une boucle for. Vérifiez que votre nouvelle solution fonctionne !