Table des Matières

Sujet précédent

Fonctions d’ordre supérieur

Sujet suivant

2. Un meilleur repete()

Cette page

1. Reeborg compte

Sélectionnez le monde Autour 1. Vous avez vérifié précédemment que Reeborg prend 9 pas pour rejoindre le mur à droite. Utilisons Reeborg pour compter le nombre de pas à nouveau en se basant sur le nombre de pas pour éviter de frapper le mur.

nombre_de_pas = 0;
while nombre_de_pas < 9:  # "<" signifie "plus petit que"
    avance()
    nombre_de_pas += 1

À votre tour!

Essayez! Puis, modifiez le programme pour écrire la valeur de la variable nombre_de_pas dans le journal de Reeborg à chaque fois que sa valeur change.

1.1. Définition de repete()?

Dans le programme ci-dessus, Reeborg comptait le nombre de pas et en faisait un nombre total prédéterminé à l’avance. Nous avons vu comment faire la même chose précédemment utilisant une seule instruction:

repete(avance, 9)

Définissons une fonction que nous allons appeler mon_répète et qui cachera le code apparaissant dans la boucle while ci-dessus:

def mon_répète():
    nombre_de_pas = 0
    while nombre_de_pas < 9:
        avance()
        nombre_de_pas += 1

mon_répète()   # on l'utilise!

Cette fonction n’est pas très utile comparativement à repete() puisque le nombre de pas à prendre ainsi que l’instruction à répéter (avance) doivent être codées spécifiquement. On peut faire mieux en passant des arguments à la fonction mon_répète comme ce qui suit:

def mon_répète(fonction_quelconque, valeur_maximale):
    nombre_de_pas = 0
    while nombre_de_pas < valeur_maximale:
        fonction_quelconque()
        nombre_de_pas += 1

mon_répète(avance, 9)
mon_répète(tourne_a_gauche, 4)

Vérifiez!

Définissez la fonction comme ci-dessus et vérifiez qu’elle fonctionne correctement!

1.2. Portée des variables

Comparez:

nombre_de_pas = 0
def mon_répète(fonction_quelconque, valeur_maximale):
    global nombre_de_pas
    while nombre_de_pas < valeur_maximale:
        fonction_quelconque()
        nombre_de_pas += 1

avec la définition précédente. La définition précédente utilisait une version locale de la variable nombre_de_pas: sa valeur n’était pas connue à l’extérieur de la fonction. La nouvelle version utilise une valeur globale, connue partout.

On utilise le terme de portée d’une variable (scope en anglais) pour référer au fait que c’est une variable locale ou globale. On recommande fortement d’utiliser des variables locales lorsque c’est possible; ceci permet d’utiliser le même nom pour d’autres variables locales utilisées ailleurs dans le programme sans que les changements à leur valeur n’affecte celle de la variable locale. Si vous utilisez des variables globales, un changement de valeur à un endroit changera la valeur de cette variable partout ailleurs dans le programme, ce qui peut mener à des bogues difficiles à retracer.