Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå
Avancerade funktioner
Funktioner med varierande argument
Mål
Ta alla förbrukningsvaror inuti förrådet och packa dem i förvaringsbehållare med hjälp av funktioner med variabla argument.
Det finns flera livsmedel i ett förråd som behöver packas för att sedan skickas ut för att säljas. För att göra detta på ett effektivt sätt kan du skapa egendefinierade funktioner med ett variabelt antal argument. Dessa är funktioner som inte har ett fast antal argument utan låter dig ange så många argument som krävs för att utföra funktionens handlingar.
Det finns två (2) sätt att lägga till ett variabelt antal argument i en funktion, beroende på vad du försöker uppnå. Den första metoden är att skapa en argumentlista, där du istället för att ange olika argumentnamn placerar en asterisk framför ett enda argument. Detta skapar automatiskt en lista.
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")
Den andra metoden är att placera argumenten i en ordbok istället för en lista. Detta görs på samma sätt som i den tidigare metoden men istället för att använda en asterisk, använder du två. Detta skapar automatiskt en ordbok istället för en lista.
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}
För att packa alla varor för leverans, skapa två uppsättningar av egendefinierade funktioner, en för att packa enskilda objekt och en för att packa flera objekt tillsammans. Använd de variabla argumenten för att packa ihop olika objekt utan att behöva skapa alltför många funktioner.
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)
Det finns fyra (4) olika typer av objekt på fältet: "jars", "eggs", "berries" och "fruit". Samla alla objekt i förrådet och gå mot X-märkena på fraktbanan. Gå till de mörka X-märkena och använd funktionen pack_singles för att packa "jars" och "eggs".
För "jars" finns det fyra (4) typer du samlar in och dessa anges som argument, nämligen "white", "purple", "red" och "brown". Dessa ska förvaras i behållaren vid den gröna mattan. Koden skrivs så här: pack_singles("jars", "white", "purple", "red", "brown")
För "eggs" finns det tre (3) typer du samlar in och dessa anges som argument, nämligen "white", "green" och "blue". Dessa ska förvaras i behållaren vid den orange mattan. Samma format används som i det tidigare exemplet.
Gå därefter mot de ljusa X-märkena och använd funktionen pack_multi för att packa "berries" och "fruit". För "berries" finns det tre (3) typer du samlar in och dessa anges som argument, nämligen "red", "blue" och "purple". Dessa ska förvaras i behållaren vid den blå mattan. Du behöver ange de kvantiteter du samlar in för varje, enligt följande: pack_multi("berries", red = 3 , blue = 2 , purple = 4 )
För "fruit" finns det fyra (4) typer du samlar in och dessa anges som argument, nämligen "apple", "pear", "orange" och "peach". Dessa ska förvaras i behållaren vid den röda mattan. Använd samma format som i det föregående exemplet, se till att alla objekt samlas in och förvaras för att slutföra nivån.