At My Fingertips

Documentation

Iniziamo!

Lo scopo di questa attività è di apprendere il funzionamento e l'utilizzo del ciclo for in Python. Il ciclo for è un cosiddetto costrutto, ovvero un insieme di parole combinate in un modo ben preciso, che nella programmazione ci permette di far svolgere al computer operazioni più complesse.

In questo caso vedremo come far ripetere al computer delle istruzioni senza doverle scrivere tutte in maniera esplicita.

Con questa attività apprenderai:

  • a utilizzare il ciclo for per far ripetere istruzioni al computer passando in rassegna gli elementi di una lista;
  • a individuare del codice ripetuto che possa essere sostituito dal costrutto del ciclo for;
  • il significato di indentazione e di blocco riferiti al codice.

Per svolgere questa attività è necessario aver acquisito le competenze di base della programmazione. Si consiglia a questo proposito di completare prima il Curriculum Impariamo a Programmare: bandiere in Python. Oltre alle basi della programmazione saranno utili le nozioni riguardanti il codice ripetuto.

Analisi: la bandiera dell'Italia

Conosci sicuramente la bandiera dell'Italia raffigurata qui sotto:

bandiera_italia_small.png

Probabilmente hai anche completato un'attività in cui ti era stato richiesto di crearne questa bandiera utilizzando PyTamaro. Avrai quindi scritto del codice come quello mostrato qui sotto:

Loading...

Parti simili

Dovresti aver individuato il gruppo di istruzioni che crea le tre strisce colorate (primo gruppo):

striscia_verde = rettangolo(LARGHEZZA_BANDIERA // 3, ALTEZZA_BANDIERA, verde)

striscia_bianca = rettangolo(LARGHEZZA_BANDIERA // 3, ALTEZZA_BANDIERA, bianco)

striscia_rossa = rettangolo(LARGHEZZA_BANDIERA // 3, ALTEZZA_BANDIERA, rosso)

ma anche il gruppo di due istruzioni che dispone queste strisce una accanto all'altra (secondo gruppo):

striscia_verde_bianca = accanto(striscia_verde, striscia_bianca)

bandiera_italia = accanto(striscia_verde_bianca, striscia_rossa)

Perché sono simili?

In ciascun gruppo le righe sono costruite tutte allo stesso modo. Ad esempio le istruzioni del primo gruppo sono tutte derivate da questa più generale:

nome_striscia = rettangolo( larghezza_striscia, altezza_striscia, colore_striscia)

mentre le istruzioni del secondo gruppo sono di base simili a questa:

nome_risultato = accanto(grafica_sinistra, grafica_destra)

Quando individuiamo righe costruite in modo simile, come quelle qui sopra, è possibile riscrivere il codice in modo più semplice, migliorandolo. Vediamolo insieme qui sotto.

La bandiera dell'Italia migliorata

Nel codice che segue sono state apportate diverse modifiche, il cui scopo era di ridurre le righe duplicate, utilizzando il costrutto del ciclo for.

Loading...

Come funziona il ciclo for?

Analizziamo ora il codice riportato qui sopra in modo sistematico, per capire come funziona il ciclo for utilizzato per costruire la bandiera dell'Italia.

Innanzitutto notiamo che è stato definito un nuovo nome costante, LISTA_COLORI, che contiene, tra parentesi quadre, proprio i nomi dei colori che vogliamo trovare nella nostra bandiera (in questo caso il verde, il bianco e il rosso).

Dovresti aver riportato questo:

LISTA_COLORI = [verde, bianco, rosso]

Nota importante: i colori sono elencati nella lista nell'ordine corretto in cui verranno utilizzati.

Notiamo poi che viene definito anche il nome bandiera_italia, a cui viene però assegnato come valore una grafica vuota. Questa operazione viene svolta sfruttando l'istruzione grafica_vuota della libreria PyTamaro.

Abbiamo poi finalmente l'inizio del ciclo for:

for colore_striscia in LISTA_COLORI:

Questo è il costrutto di cui abbiamo parlato in precedenza. Nella pratica il computer passa in rassegna i colori contenuti nella LISTA_COLORI e li assegna, uno per volta, al nome `colore_striscia. Vedremo poi in dettaglio come si svolge il tutto.

Leggendo il codice avrai anche notato che le due righe successive al for sono indentate.

Con indentazione si intende il rientro più a destra delle righe, rispetto al margine sinistro. In questo caso lo spostamento a destra è fatto rispetto alla riga dell'istruzione for.

Non si tratta di una questione puramente estetica: in Python l'indentazione serve a indicare che il codice di quella riga appartiene ad un blocco. Nel caso specifico qui sopra le righe indentate appartengono al blocco del ciclo for: significa quindi che saranno proprio queste righe ad essere ripetute più volte.

Osserva l'immagine qui sotto che riporta il codice del ciclo for utilizzato per la bandiera dell'Italia:

blocco_for.png

La parte verde è la riga che definisce come va svolto il ciclo for: in pratica ci indica che, per ogni elemento della lista LISTA_COLORI, dovremo ripetere le righe indentate, ovvero le righe contenute nel rettangolo giallo. La parte rossa rappresenta invece l'indentazione stessa.

Passo per passo

Vediamo ora passo per passo, in pseudocodice, come si svolge l'esecuzione del codice del ciclo for per la costruzione della bandiera dell'Italia.

Prima del ciclo for viene assegnata una grafica vuota, senza contenuto, al nome bandiera_italia;

Entriamo ora nel ciclo for:

  1. prendiamo il primo elemento di LISTA_COLORI, ovvero il colore verde, e lo assegniamo al nome colore_striscia;
  2. creiamo un rettangolo di colore_striscia (quindi al momento verde) e lo assegniamo al nome striscia;
  3. mettiamo il contenuto di striscia (quindi al momento la striscia verde) accanto al contenuto di bandiera_italia (che al momento contiene la grafica vuota) e assegniamo il risultato a bandiera_italia (sovrascrivendo il contenuto precedente);
  4. dato che abbiamo eseguito tutte le righe del blocco giallo del ciclo for, dobbiamo ritornare all'inizio;
  5. prendiamo il secondo elemento di LISTA_COLORI, ovvero il colore bianco, e lo assegniamo al nome colore_striscia;
  6. creiamo un rettangolo di colore_striscia (quindi al momento bianco) e lo assegniamo al nome striscia;
  7. mettiamo il contenuto di striscia (quindi al momento la striscia bianca) accanto al contenuto di bandiera_italia (che al momento contiene la striscia verde del passaggio precedente) e assegniamo il risultato a bandiera_italia (sovrascrivendo il contenuto precedente);
  8. dato che abbiamo eseguito tutte le righe del blocco giallo del ciclo for, dobbiamo ritornare all'inizio;
  9. prendiamo il terzo elemento di LISTA_COLORI, ovvero il colore rosso, e lo assegniamo al nome colore_striscia;
  10. creiamo un rettangolo di colore_striscia (quindi al momento rosso) e lo assegniamo al nome striscia;
  11. mettiamo il contenuto di striscia (quindi al momento la striscia rossa) accanto al contenuto di bandiera_italia (che al momento contiene la grafica composta dalla striscia bianca accanto a sinistra della striscia verde) e assegniamo il risultato a bandiera_italia (sovrascrivendo il contenuto precedente);
  12. dato che abbiamo eseguito tutte le righe del blocco giallo del ciclo for, dobbiamo ritornare all'inizio;
  13. se ci fossero altri elementi in LISTA_COLORI la procedura continuerebbe, ma nel nostro caso non ci sono altri colori e il ciclo for termina.

Il computer continuerà però ad eseguire eventuali altre righe successive, che non sono indentate. Ad esempio eseguirà visualizza_grafica per mostrarci la grafica prodotta.

Scritto in codice questo algoritmo for questo equivale ad eseguire:

bandiera_italia = grafica_vuota()

striscia = rettangolo(LARGHEZZA_BANDIERA // 3, ALTEZZA_BANDIERA, verde)

bandiera_italia = accanto(bandiera_italia, striscia)

striscia = rettangolo(LARGHEZZA_BANDIERA // 3, ALTEZZA_BANDIERA, bianco)

bandiera_italia = accanto(bandiera_italia, striscia)

striscia = rettangolo(LARGHEZZA_BANDIERA // 3, ALTEZZA_BANDIERA, crosso)

bandiera_italia = accanto(bandiera_italia, striscia)

Come puoi notare il ciclo for permette di esprimere un algoritmo piuttosto lungo in poche righe.

Domande

Verifica la tua risposta nel codice qui sotto:

Loading...

Cosa hai imparato

In questa attività hai imparato ad individuare del codice ripetuto che potesse essere rimpiazzato da un ciclo for.

Hai quindi appreso come utilizzare e come funziona il costrutto del ciclo for, rendendo migliore il codice e imparando il significato e l'importanza in Python dell'indentazione e dei blocchi di codice.

Ti sei potuto confrontare per la prima volta con una lista e con i suoi elementi.


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

Ciclo for - Introduzione

Logo of PyTamaro

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

Privacy PolicyPlatform Version c08406b (Wed, 20 Nov 2024 12:30:00 GMT)