Coding for KidsCoding for Kids
Niveles CreativosDesafíosGuía del Maestro
Votar por funciones
Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel

Decoradores
Encadenamiento de Decoradores

Objetivo

Decora el techo con banderas de colores encadenando decoradores.

El techo disfruta de un poco de aire fresco después de haber estado encerrado en esa cocina durante tanto tiempo, y algunas de las líneas no tienen banderas. Sería una buena idea colocarlas mientras estás aquí, sin embargo, puede ser complicado dado que necesitas varias banderas para formar una línea. Puedes lograrlo encadenando decoradores.

Los decoradores se encadenan duplicando los signos @, es decir, fijando múltiples decoradores en una sola función. Por ejemplo, esto te permite colocar una función entre dos funciones decoradoras:

# 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")

El código anterior ilustra una función con decoradores encadenados; estos decoradores se integran en la función de modo que, en los bordes de la línea, se colocan banderas azules, en la capa interna se colocan banderas rojas y, finalmente, en el centro se coloca una bandera verde. Todas se añaden a una lista llamada line, y este es el método que se usará para colocar las banderas en las líneas.

Comienza caminando hacia la marca en forma de X dorada y usando la función read() para leer las instrucciones listadas en el cartel. Allí se te informará sobre qué banderas colocar y dónde, existiendo tres (3) tipos diferentes de banderas de colores: "red", "green" y "blue". Cada línea tendrá las tres banderas, una (1) en el centro de la línea, dos (2) en la línea interna y dos (2) en la línea externa, haciendo un total de cinco (5) banderas por línea, tal como la línea predefinida en la parte inferior izquierda del mapa.

Camina hacia la marca X clara y usa la función collect() para recoger las "flags" de la caja. Luego, camina hacia las marcas X oscuras y, de izquierda a derecha, comienza a colocar las banderas en el orden que se describió en las instrucciones que leíste anteriormente. Utiliza las funciones intermedias para lograr esto; por ejemplo: middle_green() crea una línea de banderas como esta: ["blue", "red", "green" ,"red","blue" ]. Después, usa la función place() para colocar la línea utilizando la lista line, así: place(line).

Entre cada marca X, limpia la lista line usando la función clear(), de la siguiente manera: line.clear(), lo que te permite reutilizar la lista sin necesidad de crear una nueva para cada línea. La última marca X a la derecha requiere una función personalizada:

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

Utiliza los dos símbolos @ para agregar decoradores a la función, y luego completa el append en la línea y el color de la bandera en la cadena, de acuerdo con las instrucciones del cartel, para completar el nivel.

Libro de Código