Курс по усъвършенствано разработване с 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". Те трябва да бъдат съхранени в контейнера до червения килим. Използвайте същия формат, както в предишния пример. Уверете се, че всички артикули са събрани и съхранени, за да завършите нивото.