Salta al contenuto
Note per Studenti Ciclo for e range

Ciclo for e range

In questa pagina 7

Sintassi

python
for elemento in iterabile:
    corpo

A ogni iterazione elemento viene legato al successivo valore dell'iterabile (lista, stringa, tupla, range, dizionario, file...). Il ciclo termina quando gli elementi finiscono. A differenza del C, il for di Python non ha un contatore implicito: scorre valori.

python
for c in "ciao":
    print(c)          # c, i, a, o su righe diverse
for x in [3, 1, 4]:
    print(x * 2)

range

range(start, stop, step) produce gli interi da start (incluso) a stop (escluso) con passo step. Non crea una lista: genera i valori al bisogno.

Chiamata Valori
range(5) 0, 1, 2, 3, 4
range(2, 6) 2, 3, 4, 5
range(0, 10, 3) 0, 3, 6, 9
range(5, 0, -1) 5, 4, 3, 2, 1
range(5, 0) nessuno
python
for i in range(len(lista)):   # serve l'indice (es. per modificare lista[i])
    lista[i] *= 2

Funzioni utili con for

python
for i, x in enumerate(lista):          # indice e valore insieme
    print(i, x)
for nome, voto in zip(nomi, voti):     # due sequenze in parallelo (si ferma alla più corta)
    print(nome, voto)
for x in reversed(lista): ...          # al contrario
for x in sorted(lista): ...            # in ordine, senza modificare lista

Preferire enumerate a range(len(...)) quando servono sia indice sia valore.

break, continue, else

Funzionano come nel Ciclo whileCiclo while, cicli controllati da contatore, da sentinella e da condizione; break, continue, else; terminazione e invariante di ciclo.Ciclo while →: else viene eseguito se il ciclo arriva in fondo senza break.

python
for x in lista:
    if x < 0:
        print("trovato un negativo:", x)
        break
else:
    print("nessun negativo")

Cicli annidati

python
# tabellina 1..9
for i in range(1, 10):
    for j in range(1, 10):
        print(f"{i * j:3}", end="")
    print()

Il ciclo interno viene eseguito per intero a ogni iterazione dell'esterno: nn iterazioni esterne × mm interne = n⋅mn \cdot m esecuzioni del corpo (vedi Complessità computazionaleCosto di un algoritmo in funzione della dimensione dell'input; caso peggiore, migliore e medio; notazione O-grande e classi di crescita; come contare i passi di cicli e ricorsioni; costo delle operazioni Python.Complessità computazionale →). break esce solo dal ciclo interno.

for o while?

  • for: si conosce l'insieme dei valori da scorrere (elementi di una sequenza, intervallo di interi).
  • while: il numero di iterazioni dipende da una condizione che si scopre durante l'esecuzione (convergenza, input dell'utente, ricerca con uscita anticipata in strutture non sequenziali).

Errori tipici

  • Aspettarsi che range(1, n) includa n.
  • Modificare la variabile del ciclo sperando di saltare elementi: i += 1 dentro for i in range(...) non ha effetto sull'iterazione successiva.
  • Aggiungere o togliere elementi alla lista che si sta scorrendo: elementi saltati o ciclo infinito. Scorrere una copia (for x in lista[:]) o costruire una nuova lista.
  • for x in lista: x = 0 non modifica la lista (rilega solo il nome x).

Teoria collegata