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

Decoradores
Decoradores más complejos

Objetivo

Coloca las pizzas en el horno a las temperaturas correctas y prepara ensaladas usando decoradores con argumentos.

Ahora que las pizzas ya están preparadas, es momento de cocinarlas en los hornos; una vez que eso esté resuelto, deberíamos preparar las ensaladas para acompañar las pizzas después de que estén listas. Puedes lograr estas tareas utilizando decoradores con argumentos, de manera similar a las funciones personalizadas, también puedes pasar argumentos a través de tus decoradores.

Las pizzas deben colocarse en el horno, pero primero necesitas recoger más firewood en la parte inferior izquierda del mapa. Una vez recogido, recoge la cesta en el mostrador junto al horno izquierdo; esta cesta contiene pizza para ser horneada en los hornos.

Hay una función y su decorador están configurados en el editor de código. La función se utiliza para colocar y hornear la pizza en el horno, y el decorador verifica si el horno tiene la temperatura adecuada; si no es la temperatura correcta, se coloca firewood en su lugar.

def place_oven(func): def check(temp): if temp < 450: player.speak("Oven is not hot enough") player.open() player.place("firewood") player.close() return return func(temp) return check @place_oven def bake_pizza(temp): player.open() player.place("pizza") player.close() player.speak("I am baking Pizza at %d degrees" % (temp))

Camina hacia las marcas X luminosas y utiliza la función read() mientras miras el horno para identificar la temperatura del mismo. Luego, escribe la función decorada bake_pizza() y añade la temperatura que leíste como argumento, por ejemplo: bake_pizza(450).

Mientras colocas las pizzas y firewood en los hornos, detente en la marca X dorada y mira al gabinete, donde puedes recoger los ingredientes para preparar ensaladas. Actualmente, los ingredientes de las ensaladas se almacenan en una lista anidada que se muestra en el editor de código; sin embargo, esta lista está desordenada y te convendría tener los elementos almacenados en una lista adecuada para usarlos en tus ensaladas.

cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]

Crea una lista llamada ingredients y utiliza List Comprehension para "aplanar" la lista anidada. Este es el proceso de eliminar las sublistas de la lista anidada para que todos los elementos estén juntos en una sola lista en lugar de estar en múltiples listas pequeñas. Después de que la lista haya sido aplanada, utiliza la función speak() con la lista para verificar los ingredientes que vas a usar.

Después de que todos los elementos necesarios se hayan colocado en los hornos y se haya tratado la lista ingredients, camina hacia las marcas X oscuras para crear las ensaladas. En el editor se ha configurado una función y un decorador; esta vez no están conectados y deben ser declarados manualmente, por ejemplo: salad = add_toppings(toss_salad("ranch","carrot")). Este conjunto de funciones toma dos (2) argumentos: dressing y vegetable.

def add_toppings(func): def add(dressing, vegetable): player.place(dressing) player.place(vegetable) func(dressing, vegetable) return add @add_toppings def toss_salad(dressing, vegetable): player.combine("lettuce", dressing, vegetable) player.speak("I am preparing salad with %s dressing and %s" % (dressing, vegetable))

Cada marca X oscura se encuentra sobre una alfombra de color; cada una tiene una ensalada diferente que debe ser creada usando los ingredientes que recogiste del gabinete. En la alfombra amarilla, crea una ensalada utilizando: cesar y cheese; en la alfombra verde, crea una ensalada utilizando: oil y tomato; en la alfombra azul, crea una ensalada utilizando: ranch y carrot.

Una vez que las tres (3) ensaladas estén preparadas utilizando la función decorada toss_salad(dressing, vegetable) en este formato, el nivel se completará.

Libro de Código