Продвинутый курс разработки на Python
Глава
>
Уровень
Продвинутые функции
Функции с переменным числом аргументов
Цель
Соберите все расходные материалы со склада и упакуйте их в контейнеры для хранения, используя функции с переменным числом аргументов.
Внутри склада находится несколько пищевых продуктов, которые необходимо упаковать для дальнейшей отправки на продажу. Чтобы сделать это эффективно, вы можете создать пользовательские функции с переменным числом аргументов. Это функции, у которых нет фиксированного числа аргументов, что позволяет передавать столько аргументов, сколько необходимо для выполнения действий функции.
Существует два (2) способа добавить переменное число аргументов к функции, в зависимости от того, чего вы пытаетесь достичь. Первый способ – создание списка аргументов: вместо указания различных имён аргументов, поставьте звездочку перед одним аргументом. Это автоматически создаёт список.
def custom_function(message,*arguments):
player.speak(message)
return(arguments)
value = custom_function("lalala","one","two","three")
# The message "lalala" is printed on screen
# Value now returns the list ("one","two","three")
Второй способ заключается в том, чтобы поместить аргументы в словарь, а не в список. Это делается аналогично предыдущему методу, но вместо одной звездочки используется две. Это автоматически создаёт словарь вместо списка.
def custom_function(message,**arguments):
player.speak(message)
return(arguments)
value = custom_function("lalala", one = 1, two = 2, three = 3)
# The message "lalala" is printed on screen
# Value now returns the dictionary:
# {'one': 1, 'three': 3, 'two': 2}
Чтобы упаковать все предметы для отправки, создайте два набора пользовательских функций: одну для упаковки отдельных предметов и другую для упаковки нескольких предметов вместе. Используйте переменные аргументы для объединения различных предметов в одну упаковку без необходимости создавать множество функций.
def pack_singles(name,*items):
length = len(items)
player.speak("There are %d types of %s, those being:"
% (length, name) )
player.speak(items)
player.place(items)
def pack_multi(name,**items):
length = len(items)
player.speak("There are %d types of %s, those being:"
% (length, name) )
player.speak(items)
player.place(items)
На поле есть четыре (4) различных типа предметов: "jars", "eggs", "berries" и "fruit". Соберите все предметы на складе и направьтесь к крестикам X на транспортировочной полосе. Идите к тёмным крестикам X и используйте функцию pack_singles для упаковки "jars" и "eggs".
Для "jars" вы собираете четыре (4) типа, которые передаются в виде аргументов: "white", "purple", "red" и "brown". Они должны быть размещены в контейнере на зеленом ковре. Код записывается следующим образом: pack_singles("jars", "white", "purple", "red", "brown")
Для "eggs" вы собираете три (3) типа, которые передаются в виде аргументов: "white", "green" и "blue". Они должны быть размещены в контейнере на оранжевом ковре. Используется тот же формат, что и в предыдущем случае.
Затем направьтесь к светлым крестикам X и используйте функцию pack_multi для упаковки "berries" и "fruit". Для "berries" вы собираете три (3) типа, которые передаются в виде аргументов: "red", "blue" и "purple". Они должны быть размещены в контейнере на синем ковре. Вам необходимо добавить количества для каждого, как в следующем примере: pack_multi("berries", red = 3 , blue = 2 , purple = 4 )
Для "fruit" вы собираете четыре (4) типа, которые передаются в виде аргументов: "apple", "pear", "orange" и "peach". Они должны быть размещены в контейнере на красном ковре. Используйте тот же формат, что и в предыдущем случае, убедившись, что все предметы собраны и упакованы для завершения уровня.