P.10 Il ciclo for: ripetere operazioni

I computer nascono per eseguire compiti ripetitivi. Vediamo com impostare in Python un ciclo che possa percorrere gli elementi di un’array e stamparli uno a uno sullo schermo.

A differenza di altri linguaggi, in Python possiamo utilizzare una scrittura molto semplice che utilizza la parola chiave for. Un ciclo for è adatto per esplorare una lista oppure per ripetere delle operazioni per un numero di volte prefissato.

Creiamo una lista di frutti e stampiamo uno a uno i suoi elementi:

frutta = ["mela", "pera", "banana"]
for x in frutta:
    print(x)

Listato 1.16 – Stampare il contenuto di una lista con un ciclo for.

Subito dopo la parola chiave for incontriamo una variabile x, utilizzata per memorizzare gli elementi che saranno estratti, uno dopo l’altro, dalla lista. Non è obbligatorio che la variabile si chiami x, potete scegliere un nome a piacere. Per specificare la lista di elementi utilizziamo la parola speciale in. Quindi il ciclo for in Python può lavorare unicamente su liste di elementi o numeri.

Scriviamo un ciclo che stampa di seguito il contenuto di una lista di numeri:

numeri = [12,23,34,45,56,78,99]
for n in numeri:
    print(n, end=’ ‘)

Listato 1.17 – Utilizziamo un ciclo for per stampare dei numeri.

Possiamo considerare una stringa come una lista di caratteri! Possiamo quindi usare un ciclo per estrarre ad una a una le lettere che compongono una frase o una parola:

for c in "banana":
    print(c)

Listato 1.18 – Una stringa è una lista di caratteri!

Per ripetere una certa operazione una decina di volte dovremo quindi disporre di una lista con i numeri da 1 a 10, o meglio, da 0 a 9 (I conteggi, in informatica, partono solitamente da 0. Attenetevi a questa regola a meno che sia più conveniente comportarsi diversamente):

conteggio = [0,1,2,3,4,5,6,7,8,9]

Possiamo generare una lista di numeri “al volo” utilizzando range(from, to). Il primo parametro è l’indice di partenza, mentre il secondo è il limite superiore della lista generata. Indicando:

range(0, 10)

Otterremo una sequenza di numeri che vanno da 0 a 9. Tuttavia cercando di stampare direttamente il risultato prodotto, non osserveremo nulla! La funzione range() fornisce solo i numeri in sequenza, ma non genera una lista. Per ottenere una lista con range(), e poterla stampare o utilizzare dobbiamo scrivere:

l = list(range(0, 10))
print(l)

Tuttavia quando utilizziamo range() con un ciclo for, non è necessario trasformarla esplicitamente in una lista:

for i in range(0,10):
    print(i)

Il conteggio parte sempre da 0 e quindi possiamo anche scrivere, in forma abbreviata:

for i in range(10):
    print(i)

Range prevede anche un terzo parametro, per specificare il passo (step) del conteggio. Il valore predefinito è pari a 1, ma se volessimo procedere 2 a 2 scriveremo (quando si specifica il passo si deve necessariamente indicare anche il valore d’inizio del conteggio):

for i in range(0, 10, 2):
    print(i)