Video Corso Base di Python 3

08: Il Ciclo For e la Funzione range()

Menu della Serie






Benvenuti all'ottava lezione della serie dedicata all'apprendimento delle basi!

In questa puntata andremo ad introdurre il secondo ciclo di Python, l'acclamatissimo ciclo For, e introdurremo una nuova funzione integrata molto importante, la funzione range().

Il Ciclo For viene utilizzato praticamente per gli stessi compiti per cui viene utilizzato il Ciclo While di cui abbiamo parlato nella lezione precedente, con questo voglio dire che potete spesso ottenere lo stesso risultato adoperando entrambi i Cicli, ma le differenze nei meccanismi di funzionamento ne rendono preferibile uno rispetto all'altro a seconda del contesto in cui vi trovate.




A livello logico, la differenza col Ciclo While è che invece di eseguire la porzione di codice interessata fintanto che la condizione di controllo resta True, il ciclo For esegue questa fetta di programma un numero specifico di cicli.
Qui di seguito è presente uno dei programmi che abbiamo scritto nella lezione precedente, che come bene ricorderete ci da in output tutti i numeri tra 0 e 10:

contatore = 0
while contatore <= 10:
print(contatore)
contatore = contatore + 1

Riassumendone molto brevemente il funzionamento, abbiamo una variabile contatore inizializzata a 0, e fintato che il valore associato alla variabile risulta inferiore o uguale a 10, viene ripetuto un ciclo in cui viene mandato in output
il suo contenuto, a cui viene poi sommato 1 prima di ripetere il loop.

Ma cosa mi direste se vi dicessi che possiamo ottenere il medesimo risultato più velocemente utilizzando stavolta il ciclo for di Python?
Per più velocemente intendo che possiamo eliminare sia la variabile contatore che la riga di codice che serve ad incrementarne il valore...
...questo perché come abbiamo detto in precedenza, la particolarità di questo ciclo è che viene eseguito un numero già preimpostato di volte.
Nell'editor testuale scriviamo:

for numero in range(11):
print(numero)

eseguiamolo questo nuovo codice...

>0
1
2
3
4
5
6
7
8
9
10

Abbiamo ottenuto lo stesso risultato ottenuto col ciclo while, ma utilizzando stavolta solo 2 righe di codice invece di 4. Bella comodità non trovate?
Eppure sono certo che in molti tra voi si staranno chiedendo: che diavolo è quella funzione range() e come mai le ho passato 11 invece di 10, e sopratutto, allora, com'è che funziona questo benedetto Ciclo For?



Quello che la funzione range() fa è impostare un intervallo di numeri tanto ampio quanto il numero che le passiamo come parametro, senza peró includere il numero passato in se.
Siccome di default range inizia a contare da a partire da 0, per comodità potete pensare per il momento a questo intervallo come a una sorta di elenco o lista di numeri, in questo caso 11 elementi, da 0 a 10 inclusi.
Come abbiamo detto, a differenza del ciclo while, il ciclo for esegue la sua porzione di codice un numero preimpostato di volte, giusto?
L'intervallo di range() corrisponde al numero di iterazioni che verranno eseguite, ovvero al numero di volte che il ciclo for verrà processato.
Ho preparato un semplice Diagramma di Flusso per farvi fissare definitivamente il funzionamento del ciclo for:


Una volta che si entra all'interno del ciclo, il codice indentato viene mandato in loop fino a che non si arriva alla fine dell'intervallo di range(), momento in cui il ciclo termina.




Ora che abbiamo imparato come funziona un ciclo for e a cosa serve range(), vediamo un pó come poter ottenere il massimo da questa funzione, in quanto dovete sapere che possiamo passarle ben 3 parametri.



Questo ci permette di impostare oltre a un punto di inizio dell'intervallo anche un punto di fine personalizzato, e un passo di avanzamento.

Andiamo a modificare il ciclo for utilizzato prima... impostiamo un punto di inizio, ad esempio 3, manteniamo il punto di fine come 11, e settiamo anche un passo di 2...

for numero in range(3,11,2):
print(numero)

 >>>3
5
7
9

La differenza più grossa è che stavolta il passo dell'intervallo è due, quindi si passa da 3 a 5, da 5 a 7 e da 7 a 9.
Come al solito il numero finale dell'intervallo viene saltato.

Grazie alla possibilità di personalizzazione della funzione range(), possiamo anche fare in modo di ottenere i numeri al contrario... ad esempio al contrario dal 10 all'1...

for numero in range(10,0,-1):
print(numero)

 >>>10
9
8
7
6
5
4
3
2
1




Ricapitolando:
-A differenza del ciclo while, il ciclo for viene eseguito un numero di volte preimpostato;
-La funzione range() ci permette di impostare il numero di volte che il ciclo for viene eseguito;
-Alla funzione range() è possibile passare tre parametri, START, STOP e STEP.