Продвинутый курс разработки на Python
Глава
>
Уровень
Продвинутые функции
Вложенные функции
Цель
Собрать, перераспределить и убрать ткань, произведённую машинами, с использованием вложенных функций.
Иногда вам может понадобиться разместить функции внутри других функций для расширения возможностей последней. Такие функции называются вложенными функциями или внутренними функциями, и они имеют различные применения: от создания простого повторно используемого кода внутри функции до защиты ваших функций от внешней модификации.
В мастерской находится несколько машин по производству ткани: у некоторых ткань готова для хранения, у других для её завершения требуется нить. Перед каждой машиной располагается либо ковер цвета "red" либо "green", что указывает на её предназначение. В редакторе кода будет написана функция, которая позволит нам управлять машиной и либо собирать, либо размещать материалы с машины.
def operate_machine(color):
def collect_cloth():
# Collect Code
player.speak("Cloth is ready for storage")
def place_thread():
# Place Code
player.speak("Machine needed more materials")
if color == "green":
collect_cloth()
if color == "red":
place_thread()
Функция называется operate_machine и принимает аргумент с именем color. В зависимости от того, какого цвета ковер находится перед машиной, передав в качестве аргумента либо "red", либо "green", можно изменить работу машины, что позволит вам либо разместить, либо собрать предметы.
Внутри функции вы найдете две вложенные функции, названные collect_cloth() и place_thread(), предназначенные для выполнения действий, указанных в их названиях. В них отсутствуют строки, необходимые для выполнения их действий: в collect_cloth() добавьте строку player.collect("cloth"), после которой идёт player.speak("Quilt is ready for storage"), а в place_thread() добавьте строку player.place("thread"), после которой идёт player.speak("Machine needed more materials").
После того как пропущенные строки кода будут добавлены во вложенные функции, пройдите к светлому X-отметке перед ящиком и соберите "thread" для использования в машине, как это: player.collect("thread").
Пройдите к тёмным X-отметкам внутри мастерской и используйте пользовательскую функцию operate_machine, поворачиваясь к машинам. Добавьте в качестве аргумента либо "red", либо "green" в зависимости от цвета ковра, на котором расположена X-отметка, например: operate_machine("red"). Это позволит вам разместить нить и собрать ткань.
После того как вы соберёте всю ткань, пройдите к золотой X-отметке рядом с ящиком в задней части и используйте функцию place(), чтобы сохранить ткань. Создайте переменную с именем cloths, присвойте ей количество собранной ткани и поместите её в ящик для завершения уровня, как это: player.place(cloths) .