Продвинутый курс разработки на Python
Глава
>
Уровень
Расширенные функции
Частичные функции
Цель
Упакуйте и разместите строительные материалы, доставленные на причал, с использованием частичных функций.
Некоторые поставки только что были доставлены на док. Их нужно упаковать и сохранить, чтобы их потом можно было использовать в качестве строительных материалов. Материалы необходимо обернуть в ткань и связать ниткой. Важно взвесить все предметы во время упаковки, чтобы их можно было эффективно транспортировать позже. Чтобы упростить этот процесс, мы можем оптимизировать его с помощью Частичных Функций.
Частичная функция — это пользовательская функция, которая упрощается за счёт того, что не требуется задавать значения аргументов, которые остаются неизменными. Это позволяет использовать функции, принимающие несколько аргументов, и выполнять их с одним аргументом или с любым другим количеством, которое вы выберете.
from functools import partial
Для начала необходимо импортировать partial из модуля functools, это позволит вам создавать Частичные Функции. Операторы импорта всегда размещаются в верхней части редактора кода.
Создайте функцию с именем weight и задайте ей три (3) аргумента: thread, cloth и material. Эта функция позволит вам вычислить вес упакованных материалов; мы можем дополнительно оптимизировать этот процесс, передав его через частичную функцию.
def weight(thread, cloth, material):
return 2 * thread + 5 * cloth + material * 10
package = partial(weight, 4, 2)
Создайте Частичную Функцию с именем package, она настраивается аналогично лямбда-функциям. Используйте partial(), чтобы сформировать функцию, и укажите имя функции, а также фиксированные значения для аргументов, которые вы хотите задать.
Любые аргументы исходной функции, которым не присвоены значения, станут аргументами, которые необходимо будет передать Частичной Функции. В случае с Частичной Функцией package() это аргумент material.
Пройдите к тёмным X-отметкам перед ящиками, чтобы забрать упаковочные материалы. На X-отметке на жёлтом ковре используйте функцию collect(), чтобы получить "thread", затем пройдите к X-отметке на фиолетовом ковре и используйте функцию collect(), чтобы получить "cloth". Эти предметы будут использованы для упаковки материалов.
Перейдите через док и заберите все строительные материалы, а именно: bricks, planks, red_bricks и wood. Как только вы их соберёте, добавьте количество каждого материала в переменную, названную в честь материала, например: bricks = 3.
Затем пройдите к светлым X-отметкам перед ящиками и посчитайте вес каждого строительного материала перед его хранением. Используйте функцию speak() вместе с Частичной Функцией package(), чтобы посчитать вес. Используйте переменные материалов в качестве аргументов для функции package(), например:
player.speak("Package weighs %s pounds" % package(bricks)) player.place(package(bricks))
Затем, используя функцию place(), разместите материал внутри ящиков, также используя функцию package(), как показано в примере выше.
На светлой X-отметке с red ковром взвесьте и сохраните bricks. На светлой X-отметке с blue ковром взвесьте и сохраните planks. На светлой X-отметке с orange ковром взвесьте и сохраните red_bricks. На светлой X-отметке с green ковром взвесьте и сохраните wood. Сохраните и взвесьте все четыре (4) материала в правильных ящиках, чтобы пройти уровень.