Coding for KidsCoding for Kids
Níveis CriativosDesafiosGuia do Professor
Votar em funcionalidades
Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível

Decoradores
Decoradores mais complexos

Objetivo

Coloque as pizzas no forno nas temperaturas corretas e prepare saladas utilizando decorators com argumentos.

Agora que as pizzas já estão preparadas, é hora de cozinhá-las nos fornos. Depois disso, devemos preparar saladas para acompanhar as pizzas quando estiverem prontas. Você pode realizar essas tarefas usando decorators com argumentos; assim como em funções personalizadas, você também pode passar argumentos através dos decorators.

As pizzas precisam ser colocadas no forno, mas primeiro você precisa coletar mais "firewood" na parte inferior esquerda do mapa. Uma vez coletado, recolha a cesta no balcão ao lado do forno esquerdo; esta cesta contém "pizza" para ser assada nos fornos.

Há uma função e seu decorator estão configurados no editor de código; a função é usada para colocar e assar a "pizza" no forno, e o decorator verifica se o forno está na temperatura correta. Se não estiver, "firewood" é colocada no 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))

Caminhe até as marcas em X claras e use a função read() enquanto estiver de frente para o forno, para identificar a temperatura do forno. Em seguida, escreva a função decorada bake_pizza() e adicione a temperatura que você leu como argumento, por exemplo: bake_pizza(450).

Enquanto você coloca as pizzas e a lenha nos fornos, pare na marca dourada em X e fique de frente para o armário; aqui você pode coletar os ingredientes para montar as saladas. Atualmente, os ingredientes das saladas estão armazenados em uma lista aninhada delineada no editor de código, no entanto, essa lista está bagunçada e seria melhor ter os itens armazenados em uma lista adequada para usá-los nas suas saladas.

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

Crie uma lista chamada ingredients e use List Comprehension para “achatar” a lista aninhada. Este é o processo de remover as sublistas da lista aninhada para que todos os itens fiquem juntos em uma única lista, em vez de várias listas menores. Após a lista ser achatada, use a função speak() com a lista para verificar os ingredientes que você vai utilizar.

Após todos os itens necessários terem sido colocados nos fornos e a lista ingredients ter sido organizada, caminhe até as marcas escuras em X para criar as saladas. No editor, uma função e um decorator estão configurados; desta vez, eles não estão conectados e devem ser declarados manualmente, por exemplo: salad = add_toppings(toss_salad("ranch","carrot")). Este conjunto de funções recebe dois (2) argumentos: dressing e 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 escura está localizada em um tapete colorido; cada um tem uma salada diferente que precisa ser criada utilizando os ingredientes que você pegou do armário. No tapete amarelo, crie uma salada usando: "cesar" e "cheese"; no tapete verde, crie uma salada usando: "oil" e "tomato"; no tapete azul, crie uma salada usando: "ranch" e "carrot".

Uma vez que as três (3) saladas estejam preparadas usando a função decorada toss_salad(dressing, vegetable) neste formato, o nível estará completo.

Livro de Código