Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Funzioni Avanzate
Chiusure
Obiettivo
Regola l'approvvigionamento d'acqua nella fattoria configurando e utilizzando chiusure.
Ci sono quattro serbatoi d'acqua progettati per irrigare le campagne circostanti, è giunto il momento di modificarli per assicurarsi che la giusta quantità d'acqua venga distribuita nei luoghi corretti. Per fare ciò, possiamo semplificare notevolmente il lavoro utilizzando le chiusure.
Le chiusure sono funzioni annidate progettate per incapsulare i dati, riducendo così il numero di variabili da utilizzare e nascondendo i dati all'interno della funzione in modo che non possano essere manipolati esternamente, in altre parole, sigillando la funzione.
Per regolare l'acqua nei serbatoi creeremo una funzione annidata che funziona come moltiplicatore. Questa funzione opera allo stesso modo di un ciclo: la funzione esterna chiamata multiplier_of() ha un argomento che viene moltiplicato per l'argomento della sua funzione interna chiamata multiplier().
# Nested Function
def multiplier_of(n):
def multiplier(number):
return number*n
return multiplier
Una volta configurata, dobbiamo racchiudere la funzione impostando le chiusure; questo impedisce l'accesso ai loro valori e ne solidifica l'utilizzo.
# 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 chiusura sopra è chiamata multiply_by_2() e utilizza la funzione annidata che abbiamo creato con un argomento predefinito, ovvero 2, che è il numero per cui la chiusura è impostata per moltiplicare. Di conseguenza, qualsiasi numero aggiunto come argomento verrà moltiplicato per due (2) e questo attributo non può essere modificato in quanto è racchiuso.
Passando alla regolazione dei serbatoi d'acqua, configura tre (3) chiusure: multiply_by_2, multiply_by_3 e multiply_by_5. Impostale manualmente usando lo stesso formato usato nell'esempio fornito in precedenza, in questo modo: multiply_by_2 = multiplier_of(2).
In questo livello esiste una costante dizionario chiamata tanks, che come indice contiene sei (6) colori: "red", "blue", "orange", "purple", "yellow" e "green". Ogni indice contiene un numero che rappresenta la quantità d'acqua che scorre lungo il lato di un serbatoio; questo numero verrà utilizzato per regolare il serbatoio usando le chiusure "multiply_by" discusse precedentemente.
Per facilitare ciò, verrà impostata nell'editor una funzione chiamata regulate_water() che accetta due argomenti: il colore, che rappresenta gli indici sopra descritti, e il moltiplicatore, che rappresenta la chiusura moltiplicatrice da utilizzare. Un esempio della funzione in uso è il seguente: regulate_water("red" , multiply_by_2).
Dirigiti verso le X scure che segnano sopra i tappeti colorati e affronta i serbatoi. Utilizza la funzione regulate_water() impostando il colore del tappeto come primo argomento e la corretta chiusura moltiplicatrice come secondo. I moltiplicatori da utilizzare per ciascun tappeto colorato sono i seguenti:
multiply_by_2 - "red" and "green" multiply_by_3 - "blue" and "purple" multiply_by_5 - "orange" and "yellow"
Regola l'acqua su ciascun lato del serbatoio per completare il livello.