At My Fingertips

In questa attività ti eserciterai nella definizione di funzioni, nell'uso delle liste e delle ripetizioni, in modo da implementare la funzione pacman_film per ricreare la grafica seguente:

pacman-film

Pac-Man

La funzione pacman dovrebbe generare un Pac-Man in base a un determinato raggio, la cui bocca sia aperta a un determinato angolo_bocca.

Se non lo hai ancora fatto, dovresti risolvere l'attività PyTamaro iconPac-Man e salvare la funzione pacman nella tua toolbox cliccando sull'icona

SaveToToolboxButtonSurrounded.png

sulla cella che contiene la definizione della funzione.

Dopo aver fatto questo lavoro, importa la funzione pacman dalla tua toolbox eseguando la prossima casella di codice.

Loading...

Una lista di Pac-Man

In questa attività vogliamo produrre una lista di grafiche (una list[Grafica]), in modo tale che ciascun elemento della lista sia una grafica di un Pac-Man la cui bocca è aperta leggermente più larga di quella del precedente.

Dobbiamo dunque implementare una funzione che ritorni una lista di questo tipo. Chiamiamola lista_pacman.

Se hai già risolto l'attività Pac-Man animato, avrai implementato una funzione con lo stesso nome che fa quasi la stessa cosa. L'unica differenza in questo caso è che i Pac-Man non avranno uno sfondo. In questa attività ti verrà chiesto di implementare nuovamente un codice praticamente uguale, che (come discusso nel Curriculum Benvenuto in PyTamaro, si chiama duplicazione del codice, ed è una brutta cosa).

Anche se hai già risolto in precedenza qualcosa di molto simile, in questo caso vogliamo che tu lo faccia ancora in modo da fare pratica, per cui ti invitiamo a non utilizzare la tua toolbox per la funzione lista_pacman.

Descrizione della funzione

Concentriamoci ora sulla funzione lista_pacman. Vogliamo che questa funzione produca una list[Grafica] (una lista di grafiche), contenente un numero a scelta di grafiche che rappresentino Pac-Man, dove il primo Pac-Man cominci con un angolo minimo di apertura della bocca a scelta e ognuno dei Pac-Man successivi apra la bocca un po' di più, fino a raggiungere un angolo massimo di apertura della bocca a scelta, per poi diminuire nuovamente fino a ritornare all'angolo di apertura della bocca iniziale.

Anche il raggio dei Pac-Man può essere a scelta, ma tutti i Pac-Man nella stessa lista dovrebbero avere lo stesso.

Ecco due esempi delle liste di grafiche che dovresti ottenere con la tua funzione lista_pacman.

five pacmans

three pacmans

Scegliere i parametri

La scelta dei parametri dipende da ciò che vogliamo che la funzione sia in grado di fare. Se vogliamo poter scegliere il colore dei Pac-Man, parametrizzare il colore sarebbe una buona idea. Nel nostro caso vogliamo che il colore sia fisso (giallo), per cui il colore dei Pac-Man non dovrebbe essere un parametro della funzione.

D'altra parte, vogliamo poter scegliere il numero di Pac-Man nella nostra lista, per cui uno dei parametri della funzione dovrebbe essere il numero di Pac-Man.

Data la descrizione della funzione, dovrebbe ricevere i parametri seguenti:

  • lato: il lato di ogni tessera Pac-Man (che corrisponde al diametro di Pac-Man);
  • angolo_min: l'angolo minimo di apertura della bocca di Pac-Man, espresso in gradi;
  • angolo_max: l'angolo massimo di apertura della bocca di Pac-man, espresso in gradi;
  • numero_pacman: il numero desiderato di Pac-Man che vogliamo rappresentati nella nostra pellicola.

E per quanto riguarda i tipi di dato?

Il lato dovrebbe essere di tipo float, dato che potrebbe accettare anche numeri con la virgola (come 120.5). Anche il tipo di angolo_min e angolo_max dovrebbe essere float, poiché un angolo di apertura della bocca come 60.2° sarebbe valido. Il tipo di numero_pacman (e questo vale in generale per i numeri che vengono usati per contare) dovrebbe essere int, dato che possiamo avere solo un numero intero di Pac-Man.

Di conseguenza, i parametri della nostra funzione saranno i seguenti:

def pacman_list(lato: float, angolo_min: float, angolo_max: float, numero_pacman: int)

Implementare la funzione

Ora, come abbiamo discusso, implementa la funzione lista_pacman in modo che crei una lista di grafiche che rappresentino Pac-Man.

Ricordati di usare la funzione pacman che hai importato all'inizio dell'attività.

Nota bene: per aggiungere un elemento a una lista si può utilizzare il metodo append, con la sintassi nomelista.append(elemento). Per esempio, per aggiungere l'elemento 3 a una lista chiamata numeri dovresti digitare numeri.append(3). Dopo aver generato una nuova grafica di Pac-Man puoi dunque usare questo metodo per aggiungerla alla lista.

Loading...

Comprensione di lista

Hai scritto qualcosa di simile a questo?

def lista_pacman(...) -> list[Grafica]:
    differenza_angolo = (angolo_max - angolo_min) / (numero_pacman - 1)
    risultato = []
    for i in range(numero_pacman):
        risultato.append(pacman(raggio, angolo_min + i * differenza_angolo))
    return result

Ben fatto!

Sapevi che Python offre la possibilità di ottimizzare questo codice usando una comprensione di lista, che permette di riempire una lista basandosi su valori di un'altra lista (come un intervallo di valori)?

Il codice seguente fa la stessa cosa di quello sopra!

def lista_pacman(...) -> list[Grafica]:
    differenza_angolo = (angolo_max - angolo_min) / (numero_pacman - 1)
    return [pacman(raggio, angolo_min + i * differenza_angolo) for i in range(numero_pacman)]

Capisci questo codice? Sei d'accordo nel dire che le due implementazioni si equivalgono?

La pellicola di Pac-Man

Per ottenere la grafica della pellicola di Pac-Man (cioè una sequenza di immagini di Pac-Man) devi ora generare una lista usando lista_pacman e collocare ciascuno degli elementi della lista uno accanto all'altro.

Implementa la funzionelista_pacman: nota che essa deve ricevere in input un parametro lista_di_pacman del tipo list[Grafica]. La funzione dovrebbe ritornare una grafica composta degli elementi della lista collocati uno accanto all'altro.

Loading...

Ora usa una combinazione di visualizza_grafica, pacman_film e lista_pacman per generare qualcosa di simile alla grafica seguente:

pacman-film

Ricordati che pacman_film riceve come parametro una lista di grafiche.

Loading...

Cos'hai imparato

In questa attività hai imparato come collocare diverse grafiche l'una accanto all'altra mettendole in una lista e usando i cicli.

Ti sei esercitato nella creazione di liste e sei stato introdotto al concetto di comprensione di lista.

Hai anche avuto la possibilità di esercitarti nella scelta dei parametri nel definire la funzione lista_pacman e hai anche scelto i tipi dei parametri.

Hai imparato come importare la funzione pacman dalla tua toolbox.


This activity has been created by Lardelli and is licensed under CC BY-SA 4.0.

It is derived from this activity.

Pacman Film

Logo of PyTamaro

PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI

Privacy PolicyPlatform Version c3a8286 (Mon, 14 Oct 2024 13:30:28 GMT)