Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Funzioni Avanzate
Funzioni con argomenti variabili
Obiettivo
Raccogli tutti i beni di consumo all'interno del magazzino e confezionali in contenitori di stoccaggio utilizzando funzioni con argomenti variabili.
Vi sono diversi alimenti situati in un magazzino che devono essere confezionati per essere spediti in vendita. Per fare ciò in modo efficiente, puoi creare funzioni personalizzate con un numero variabile di argomenti. Queste sono funzioni che non hanno un numero fisso di argomenti e ti permettono di impostare quanti argomenti desideri per eseguire le azioni della funzione.
Esistono due (2) modi per aggiungere un numero variabile di argomenti a una funzione, a seconda di ciò che desideri ottenere. Il primo metodo consiste nel creare una lista di argomenti: anziché inserire vari nomi di argomenti, metti un asterisco davanti a un singolo argomento. Questo crea automaticamente una lista.
def custom_function(message,*arguments):
player.speak(message)
return(arguments)
value = custom_function("lalala","one","two","three")
# Il messaggio "lalala" viene stampato sullo schermo
# value ora restituisce la lista ("one","two","three")
Il secondo metodo prevede di posizionare gli argomenti all'interno di un dizionario anziché di una lista. Questo viene fatto nello stesso modo del metodo precedente, ma invece di mettere un asterisco, ne metti due. Così facendo viene creato automaticamente un dizionario invece di una lista.
def custom_function(message,**arguments):
player.speak(message)
return(arguments)
value = custom_function("lalala", one = 1, two = 2, three = 3)
# Il messaggio "lalala" viene stampato sullo schermo
# value ora restituisce il dizionario:
# {'one': 1, 'three': 3, 'two': 2}
Per confezionare tutti gli articoli per la spedizione, crea due set di funzioni personalizzate: una per confezionare articoli singoli e una per confezionare più articoli insieme. Utilizza gli argomenti variabili per raggruppare i vari articoli senza dover creare troppe funzioni.
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)
Ci sono quattro (4) tipi diversi di articoli nel campo: "jars", "eggs", "berries" e "fruit". Raccogli tutti gli articoli presenti nel magazzino e cammina verso le X segnate sulla corsia di spedizione. Dirigiti verso le X scure e utilizza le funzioni pack_singles per confezionare "jars" e "eggs".
Per "jars" ci sono quattro (4) tipi che raccogli e inserisci come argomenti, ossia "white", "purple", "red" e "brown". Questi devono essere immagazzinati nel contenitore sul green carpet. Il codice viene scritto così: pack_singles("jars", "white", "purple", "red", "brown")
Per "eggs" ci sono tre (3) tipi che raccogli e inserisci come argomenti, ossia "white", "green" e "blue". Questi devono essere immagazzinati nel contenitore sul orange carpet. Viene utilizzato lo stesso formato del precedente.
Successivamente, cammina verso le X chiare e utilizza la funzione pack_multi per confezionare "berries" e "fruit". Per "berries" ci sono tre (3) tipi che raccogli e inserisci come argomenti, ossia "red", "blue" e "purple". Questi devono essere immagazzinati nel contenitore sul blue carpet. Devi aggiungere anche le quantità raccolte di ciascuno, in questo modo: pack_multi("berries", red = 3 , blue = 2 , purple = 4 )
Per "fruit" ci sono quattro (4) tipi che raccogli e inserisci come argomenti, ossia "apple", "pear", "orange" e "peach". Questi devono essere immagazzinati nel contenitore sul red carpet. Utilizza lo stesso formato dell'elemento precedente, assicurandoti che tutti gli articoli vengano raccolti e immagazzinati per completare il livello.