Avansert Pythonutviklingskurs
Kapittel
>
Nivå
Avanserte funksjoner
Funksjoner med variabel antall argumenter
Mål
Skaff alle forbruksvarene på lageret og pakk dem i lagringsbeholdere ved å bruke funksjoner med variabelt antall argumenter.
Det finnes flere matvarer som befinner seg inne på et lager og som må pakkes for at de skal kunne sendes for å bli solgt. For å gjøre dette effektivt, kan du opprette egendefinerte funksjoner med et variabelt antall argumenter. Dette er funksjoner uten et fast antall argumenter, og de lar deg spesifisere så mange argumenter du trenger for å utføre funksjonens handlinger.
Det finnes to (2) måter å legge til et variabelt antall argumenter til en funksjon, avhengig av hva du prøver å oppnå. Den første metoden er å lage en argumentliste. I stedet for å gi ulike argumentnavn, plasser en asterisk foran et enkelt argument. Dette oppretter automatisk en liste.
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 andre metoden er å plassere argumentene i en ordbok i stedet for en liste. Dette gjøres på samme måte som i den forrige metoden, men istedenfor å legge til en asterisk, legger du til to. Dette oppretter automatisk en ordbok i stedet for en liste.
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}
For å pakke alle varene for sending, opprett to sett med egendefinerte funksjoner, en for å pakke enkeltgjenstander og en for å pakke flere gjenstander sammen. Bruk de variable argumentene for å pakke sammen ulike gjenstander uten at du trenger å lage for mange funksjoner.
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 finnes fire (4) forskjellige typer gjenstander på området: "jars", "eggs", "berries" og "fruit". Samle alle gjenstandene på lageret og gå mot X-markeringene på fraktbanen. Gå til de mørke X-markeringene og bruk funksjonen pack_singles for å pakke "jars" og "eggs".
For "jars" er det fire (4) typer du samler, og de oppgis som argumenter, nemlig "white", "purple", "red" og "brown". Disse skal lagres i beholderen ved den green carpet. Koden skrives slik: pack_singles("jars", "white", "purple", "red", "brown")
For "eggs" er det tre (3) typer du samler, og de oppgis som argumenter, nemlig "white", "green" og "blue". Disse skal lagres i beholderen ved den orange carpet. Samme format brukes som i forrige oppsett.
Etterpå, gå til de lyse X-markeringene og bruk funksjonen pack_multi for å pakke "berries" og "fruit". For "berries" er det tre (3) typer du samler, og de oppgis som argumenter, nemlig "red", "blue" og "purple". Disse skal lagres i beholderen ved den blue carpet. Du må legge til antall du samler av hver, slik: pack_multi("berries", red = 3 , blue = 2 , purple = 4 )
For "fruit" er det fire (4) typer du samler, og de oppgis som argumenter, nemlig "apple", "pear", "orange" og "peach". Disse skal lagres i beholderen ved den red carpet. Bruk samme format som i forrige oppføring, og sørg for at alle gjenstandene blir samlet og lagret for å fullføre nivået.