Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/01073.jsonl.gz/430

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:
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.
Conosci sicuramente la bandiera dell'Italia raffigurata qui sotto:
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:
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.
Nel codice che segue sono state apportate diverse modifiche, il cui scopo era di ridurre le righe duplicate, utilizzando il costrutto del 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:
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:
LISTA_COLORI, ovvero il colore verde, e lo assegniamo al nome
colore_striscia;
colore_striscia (quindi al momento verde) e lo assegniamo al nome
striscia;
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);
LISTA_COLORI, ovvero il colore bianco, e lo assegniamo al nome
colore_striscia;
colore_striscia (quindi al momento bianco) e lo assegniamo al nome
striscia;
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);
LISTA_COLORI, ovvero il colore rosso, e lo assegniamo al nome
colore_striscia;
colore_striscia (quindi al momento rosso) e lo assegniamo al nome
striscia;
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);
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:
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.
Ciclo for - Introduzione