Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel
Funcții avansate
Funcții cu argumente variabile
Obiectiv
Adună toate consumabilele din depozit și ambalează-le în containere de depozitare folosind funcții cu argumente variabile.
Există mai multe produse alimentare situate într-un depozit care trebuie ambalate pentru a fi expediate spre vânzare. Pentru a face acest lucru eficient, poți crea funcții personalizate cu un număr variabil de argumente. Acestea sunt funcții care nu au un număr fix de argumente și îți permit să specifici câte argumente sunt necesare pentru a executa acțiunile funcției.
Există două (2) moduri de a adăuga un număr variabil de argumente unei funcții, în funcție de ceea ce încerci să realizezi. Prima metodă constă în crearea unei liste de argumente; în loc să pui mai multe nume de argumente, plasezi un asterisk înaintea unui singur argument. Acest lucru creează automat o listă.
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")
A doua metodă constă în plasarea argumentelor într-un dicționar, în loc de listă, realizată în același mod ca în metoda anterioară, dar în loc să pui un asterisk, pui doi. Acest lucru creează automat un dicționar în loc de o listă.
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}
Pentru a ambala toate articolele pentru expediere, creează două seturi de funcții personalizate, una pentru ambalarea articolelor individuale și una pentru ambalarea articolelor multiple împreună. Folosește argumentele variabile pentru a ambala împreună diverse articole, fără a fi nevoie să creezi prea multe funcții.
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)
Există patru (4) tipuri diferite de articole pe teren: "jars" , "eggs" , "berries" și "fruit". Adună toate articolele din depozit și mergi spre marcajele X de pe pista de expediere. Mergi la marcajele X închise și folosește funcțiile pack_singles pentru a ambala "jars" și "eggs".
Pentru "jars" există patru (4) tipuri pe care le aduni și sunt introduse ca argumente, și anume: "white", "purple", "red" și "brown". Acestea trebuie stocate în containerul de lângă covorul verde. Codul este scris astfel: pack_singles("jars", "white", "purple", "red", "brown")
Pentru "eggs" există trei (3) tipuri pe care le aduni și sunt introduse ca argumente, și anume: "white", "green", și "blue". Acestea trebuie stocate în containerul de lângă covorul portocaliu. Se folosește același format ca în configurația anterioară.
După aceea, mergi la marcajele X deschise și folosește funcția pack_multi pentru a ambala "berries" și "fruit". Pentru "berries" există trei (3) tipuri pe care le aduni și sunt introduse ca argumente, și anume: "red", "blue", și "purple". Acestea trebuie stocate în containerul de lângă covorul albastru. Trebuie să adaugi cantitățile colectate pentru fiecare, astfel: pack_multi("berries", red = 3 , blue = 2 , purple = 4 )
Pentru "fruit" există patru (4) tipuri pe care le aduni și sunt introduse ca argumente, și anume: "apple", "pear", "orange", și "peach". Acestea trebuie stocate în containerul de lângă covorul roșu. Folosește același format ca în intrarea anterioară, asigură-te că toate articolele sunt colectate și stocate pentru a finaliza nivelul.