Cicli in Python e JES: for, while, break e continue
Fondamenti di Informatica · Python / Jython (JES)
Questi appunti trattano l'iterazione, cioè la ripetizione di un gruppo di istruzioni. Gli esempi sono scritti per JES
(Jython Environment for Students), che esegue Python 2.7 su Java, e funzionano anche in Python 3; le differenze tra le
due versioni sono segnalate. Tutti gli esempi sono stati eseguiti.
1. Perché servono i cicli
Molti problemi richiedono di ripetere la stessa operazione su tanti dati: sommare tutti gli elementi di una lista, contare
le vocali di una parola, modificare ognuno dei pixel di un'immagine (che possono essere centinaia di migliaia). Scrivere
un'istruzione per ogni dato è impossibile, anche perché il numero di dati di solito non è noto quando si scrive il
programma. Un ciclo (o loop) esegue ripetutamente un blocco di istruzioni, detto corpo del ciclo. Python offre due cicli:
e .
for while
2. Il ciclo for
Il ciclo scorre una sequenza: a ogni ripetizione (detta iterazione) la variabile di ciclo assume il valore
for
dell'elemento successivo, e il corpo viene eseguito con quel valore. Il ciclo termina quando gli elementi sono finiti.
for variabile in sequenza:
corpo
Come per , sono obbligatori i due punti e l'indentazione del corpo.
if
>>> for frutto in ["mela", "pera", "kiwi"]:
... print(frutto)
...
mela
pera
kiwi
>>> for c in "ciao":
... print(c.upper())
...
C
I
A
O
La sequenza può essere una lista, una stringa, una tupla o il risultato di . Il è il ciclo da preferire quando si
range for
conosce in anticipo su quali elementi lavorare.
3. La funzione range
genera una sequenza di interi ed è il modo standard per ripetere un'azione un numero fissato di volte o per
range
scorrere gli indici di una lista. Ha tre forme:
: da 0 a (quindi numeri);
range(n) n - 1 n
: da incluso a escluso;
range(inizio, fine) inizio fine
: con incremento , che può essere negativo per contare all'indietro.
range(inizio, fine, passo) passo
1
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(2, 6))
[2, 3, 4, 5]
>>> list(range(0, 20, 5))
[0, 5, 10, 15]
>>> list(range(5, 0, -1))
[5, 4, 3, 2, 1]
range in JES e in Python 3
In JES (Python 2) restituisce direttamente la lista . In Python 3 restituisce un oggetto
range(5) [0, 1, 2, 3, 4]
che produce i numeri uno alla volta; per vederli tutti si scrive . Nel ciclo le due
range list(range(5)) for
versioni si comportano nello stesso modo.
Scorrere