Coding for KidsCoding for Kids
Креативні РівніВикликиПосібник для Вчителів
Голосувати за функції
Поглиблений курс розробки на Python
Розділ
>
Рівень

Декоратори
Більш складні декоратори

Мета

Помістіть піци в піч за правильною температурою та приготуйте салати, використовуючи декоратори з аргументами.

Тепер, коли піци вже підготовлені, настав час запікати їх у пічах. Після того, як це буде зроблено, нам потрібно підготувати салати, які подаватимуться разом з піцами після їхнього приготування. Ви можете виконати ці завдання, використовуючи декоратори з аргументами; подібно до користувацьких функцій, ви також можете передавати аргументи через ваші декоратори.

Піци потрібно розмістити в піч, але спочатку вам потрібно зібрати більше "firewood" у нижньому лівому куті карти. Після збору візьміть кошик на прилавку біля лівої печі, цей кошик містить "pizza", яку потрібно запікати в пічах.

Є функція та її декоратор, налаштовані в редакторі коду. Функція використовується для розміщення та запікання "pizza" у печі, а декоратор перевіряє, чи має піч правильну температуру, і якщо температура невірна, замість неї розміщується "firewood".

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

Перейдіть до позначок із легким X та використайте функцію read(), повернувшись до печі, щоб визначити її температуру. Потім напишіть декоровану функцію bake_pizza() і додайте зчитану температуру як аргумент, наприклад: bake_pizza(450).

Поки ви розміщуєте піци та "firewood" у пічах, зупиніться біля позначки із золотим X і зверніться до шафи, де ви можете зібрати інгредієнти для приготування салатів. Наразі інгредієнти для салатів зберігаються у вкладеному списку, який наведено в редакторі коду, проте цей список непорядний, і вам буде вигідніше зберегти елементи в окремому списку для подальшого використання у салатах.

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

Створіть список з ім’ям ingredients та використайте скорочення списку (List Comprehension) для “розгладження” вкладеного списку. Це процес видалення підсписків із вкладеного списку, щоб усі елементи опинилися в одному великому списку, а не в декількох менших. Після того, як список буде розгладжено, використайте функцію speak() з цим списком для перевірки інгредієнтів, які ви збираєтеся використовувати.

Після того, як всі необхідні предмети будуть розміщені в пічах, а список ingredients буде сформований, перейдіть до позначок із темним X для створення салатів. У редакторі налаштована функція та декоратор, які цього разу не зв’язані і повинні бути оголошені вручну, наприклад: salad = add_toppings(toss_salad("ranch","carrot")). Цей набір функцій приймає два (2) аргументи: dressing та 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))

Кожна позначка із темним X розташована на кольоровому килимі, і на кожному з них потрібно створити інший салат, використовуючи інгредієнти, зібрані зі шафи. На жовтому килимі створіть салат із використанням: "cesar" та "cheese"; на зеленому килимі створіть салат із використанням: "oil" та "tomato"; на синьому килимі створіть салат із використанням: "ranch" та "carrot".

Як тільки всі три (3) салати будуть зібрані за допомогою декорованої функції toss_salad(dressing, vegetable) у зазначеному форматі, рівень буде завершено.

Книга Коду