Edistynyt Python-kehityskurssi
Luku
>
Taso
Edistyneet funktiot
Varianttiargumenttifunktiot
Tavoite
Nappaa kaikki varastossasi olevat käyttöesineet ja pakkaa ne varastointikontteihin käyttäen muuttuvia argumenttifunktioita.
Varastossa sijaitsee useita ruokatuotteita, jotka täytyy pakata, jotta ne voidaan lähettää myytäväksi. Tehokkuuden parantamiseksi voit luoda omia funktioita, jotka hyväksyvät muuttuvan määrän argumentteja. Nämä ovat funktioita, joilla ei ole ennalta määrättyä argumenttien määrää, ja ne mahdollistavat niin monen argumentin asettamisen kuin funktio tarvitsee suorittaakseen toimintonsa.
On olemassa kaksi (2) tapaa lisätä funktioon muuttuva määrä argumentteja sen mukaan, mitä yrität saavuttaa. Ensimmäinen menetelmä on luoda argumenttilista; sen sijaan, että laitat useita argumenttien nimiä, laita yhden argumentin eteen tähti (*). Tämä luo automaattisesti listan.
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")
Toinen menetelmä on sijoittaa argumentit sanakirjaan listan sijaan. Tämä tehdään samalla tavalla kuin edellisessä menetelmässä, mutta yhden tähden sijaan käytät kahta (**) tähteä. Tämä luo automaattisesti sanakirjan listan sijaan.
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}
Pakkaa kaikki lähetykseen tarkoitettu tavarat luomalla kaksi erillistä funktiota: yksi yksittäisten tavaroiden pakkaamiseen ja yksi useamman tavaran pakkaamiseen yhdessä. Käytä muuttuvia argumentteja pakataksesi erilaiset tavarat yhteen ilman, että sinun tarvitsee luoda liikaa funktioita.
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)
Kentällä on neljä (4) erilaista tavaraluokkaa: "jars", "eggs", "berries" ja "fruit". Kerää kaikki varastossa olevat tavarat ja kulje toimitusreitin X-koordinaattien luo. Kävele pimeiden X-merkintöjen luo ja käytä pack_singles-funktiota pakataksesi "jars" ja "eggs".
"Jars":in osalta keräät neljä (4) erilaista tyyppiä argumentteina: "white", "purple", "red" ja "brown". Nämä tulee varastoida konttiin, joka sijaitsee green carpet -alueen vieressä. Koodi kirjoitetaan näin: pack_singles("jars", "white", "purple", "red", "brown")
"Eggs":in osalta keräät kolmea (3) erilaista tyyppiä argumentteina: "white", "green" ja "blue". Nämä tulee varastoida konttiin, joka sijaitsee orange carpet -alueen vieressä. Sama muotoilu käytetään kuin edellisessä asetuksessa.
Sen jälkeen kävele valoisien X-merkintöjen luo ja käytä pack_multi-funktiota pakataksesi "berries" ja "fruit". "Berries":n osalta keräät kolmea (3) erilaista tyyppiä argumentteina: "red", "blue" ja "purple". Nämä tulee varastoida konttiin, joka sijaitsee blue carpet -alueen vieressä. Sinun täytyy lisätä kunkin kerätyn tavaran määrä näin: pack_multi("berries", red = 3 , blue = 2 , purple = 4 )
"Fruit":n osalta keräät neljää (4) erilaista tyyppiä argumentteina: "apple", "pear", "orange" ja "peach". Nämä tulee varastoida konttiin, joka sijaitsee red carpet -alueen vieressä. Käytä samaa muotoilua kuin edellisessä kohdassa; varmista, että kaikki tavarat on kerätty ja varastoitu tason suorittamiseksi.