Cours avancé de développement Python
Chapitre
>
Niveau
Fonctions avancées
Fermetures
Objectif
Réguler l'approvisionnement en eau de la ferme en configurant et en utilisant des closures.
Il y a quatre réservoirs d'eau conçus pour irriguer les terres agricoles environnantes, il est grand temps de les modifier afin de s'assurer que la bonne quantité d'eau soit distribuée aux bons endroits. Pour ce faire, nous pouvons faciliter la tâche en utilisant des closures.
Les closures sont des fonctions imbriquées conçues pour encapsuler des données, ce qui réduit le nombre de variables à utiliser et cache les données à l'intérieur de la fonction afin qu'elles ne puissent pas être manipulées de l'extérieur, autrement dit, en fermant la fonction.
Afin de réguler l'eau dans les réservoirs, nous allons créer une fonction imbriquée qui agit comme un multiplicateur. Cette fonction fonctionne de la même manière qu'une boucle, la fonction externe nommée multiplier_of() ayant un argument qui est multiplié par l'argument de sa fonction interne nommée multiplier().
# Nested Function
def multiplier_of(n):
def multiplier(number):
return number*n
return multiplier
Une fois mise en place, nous devons enfermer la fonction en créant des closures, ce qui empêche l'accès à leurs valeurs et solidifie leur utilisation.
# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]
La closure ci-dessus est nommée multiply_by_2() et utilise la fonction imbriquée que nous avons créée avec un argument fixe, à savoir 2, qui est le nombre par lequel la closure est configurée pour multiplier. En conséquence, tout nombre que nous ajouterons en argument sera multiplié par deux (2) et cette caractéristique ne peut être modifiée du fait qu'elle est enfermée.
En ce qui concerne la régulation des réservoirs d'eau, mettez en place trois (3) closures : multiply_by_2, multiply_by_3 et multiply_by_5. Configurez chacune d'elles manuellement en utilisant le même format que dans l'exemple donné précédemment, comme ceci : multiply_by_2 = multiplier_of(2).
Il existe une constante dictionnaire dans ce niveau nommée tanks, qui, en tant qu'index, contient six (6) couleurs : "red", "blue", "orange", "purple", "yellow" et "green". Chaque index contient un nombre représentant la quantité d'eau qui circule à travers le flanc d'un réservoir. Ce nombre sera utilisé pour réguler le réservoir en utilisant les closures "multiply_by" mentionnées précédemment.
Pour faciliter cela, une fonction sera mise en place dans l'éditeur nommée regulate_water(), qui prend deux arguments : la couleur qui représente les index mentionnés ci-dessus et le multiplicateur qui représente la closure à utiliser. Un exemple d'utilisation de la fonction est le suivant : regulate_water("red", multiply_by_2).
Marchez vers les X sombres indiqués ci-dessus sur les tapis colorés et faites face aux réservoirs, utilisez la fonction regulate_water() et placez la couleur du tapis en premier argument et la closure multiplicatrice appropriée en second. Les multiplicateurs à utiliser pour chaque tapis coloré sont les suivants :
multiply_by_2 - "red" et "green" multiply_by_3 - "blue" et "purple" multiply_by_5 - "orange" et "yellow"
Régulez l'eau sur chacun des flancs du réservoir afin de compléter le niveau.