Coding for KidsCoding for Kids
Livelli CreativiSfideGuida per Insegnanti
Vota per le funzionalità
Corso Avanzato di Sviluppo Python
Capitolo
>
Livello

Decoratori
Decoratori concatenati

Obiettivo

Decora il tetto con bandiere colorate concatenando i decoratori.

Il tetto ha finalmente un po' d'aria fresca dopo essere stato rinchiuso in quella cucina per così tanto tempo, e alcune linee non hanno bandiere. Sarebbe una buona idea posizionarle mentre ci sei, tuttavia potrebbe essere complicato dato che sono necessarie diverse bandiere per comporre una linea. Puoi realizzarlo concatenando i decoratori.

I decoratori sono concatenati raddoppiando i simboli @, ossia applicando più decoratori su una singola funzione. Ad esempio, questo ti permette di "infilare" una funzione tra due funzioni decoratrici:

# List to add flags to a line line = [] # Decorator adding a red flag def red_flag(func): def add_flag(): line.append("red") player.speak("Two red flags added to the line") func() line.append("red") return add_flag # Decorator adding a blue flag def blue_flag(func): def add_flag(): line.append("blue") player.speak("Two blue flags added to the line") func() line.append("blue") return add_flag # Decorated Function adding line and middle flag @blue_flag @red_flag def middle_green(): line.append("green") player.speak("A green flag has been added to the line")

Il codice sopra illustra una funzione a cui sono stati applicati decoratori concatenati; questi decoratori si intrecciano nella funzione in modo tale che, agli estremi della linea, vengano posizionate bandiere blu, nello strato interno bandiere rosse e, infine, al centro una bandiera verde. Vengono tutte aggiunte a una lista chiamata line; questo è il metodo che verrà utilizzato per disporre le bandiere sulle linee.

Inizia dirigendoti verso il segno X d'oro e utilizzando la funzione read() per controllare le istruzioni riportate sul cartello. Qui ti verrà indicato quali bandiere posizionare e dove, considerando che ci sono tre (3) tipi diversi di bandiere colorate: "red", "green" e "blue". Ogni linea avrà tutte e tre le bandiere: una (1) al centro della linea, due (2) nella linea interna e due (2) nella linea esterna, per un totale di cinque (5) bandiere per linea, proprio come la linea predefinita nell'angolo in basso a sinistra della mappa.

Dirigiti verso il segno X chiaro e usa la funzione collect() per prendere le "flags" dalla cassa. Successivamente, dirigiti verso i segni X scuri e, da sinistra a destra, inizia a posizionare le bandiere nell'ordine descritto nelle istruzioni lette in precedenza. Usa le funzioni centrali per ottenere questo risultato, per esempio: middle_green() crea una linea di bandiere come questa: ["blue", "red", "green" ,"red","blue" ]. Quindi, usa la funzione place() per posizionare la linea utilizzando la lista line, in questo modo: place(line).

Tra ogni segno X, svuota la lista line utilizzando la funzione clear(), in questo modo: line.clear(), il che ti permette di riutilizzare la lista senza doverne creare una nuova per ogni linea. L'ultimo segno X a destra richiede una funzione personalizzata:

@ @ def middle_custom(): line.append( Insert append ) player.speak("%s flag has been added to the line" % ( insert flag ))

Usa i due simboli @ per aggiungere decoratori alla funzione, completando poi l'istruzione di append della linea e il colore della bandiera nella stringa. Fai ciò in conformità con le istruzioni sul cartello per completare il livello.

Libro del Codice