Cicli in Python

I cicli sono una parte fondamentale della programmazione e consentono di eseguire un’operazione ripetutamente. In Python esistono due principali tipi di cicli:

  • while: esegue un blocco di codice finché una condizione è vera.
  • for: itera su una sequenza (lista, tupla, stringa, ecc.) o un intervallo (range).

Vediamo in dettaglio come funzionano i cicli in Python.


Il Ciclo while

Il ciclo while continua a eseguire un blocco di codice finché una condizione specificata è vera. Se la condizione diventa falsa, il ciclo si interrompe.

Sintassi del ciclo while

while condizione:
    # Codice da eseguire finché la condizione è vera
    pass  # Blocco vuoto, può essere sostituito dal codice effettivo

Esempio di ciclo while

n = 1

while n <= 5:
    print(n)
    n += 1  # Incremento della variabile n a ogni iterazione

Output:

1
2
3
4
5

In questo esempio, il ciclo continua a eseguire finché n è minore o uguale a 5. A ogni iterazione, il valore di n viene incrementato di 1.


Cicli infiniti con while

È importante evitare cicli infiniti, in cui la condizione rimane sempre vera. Per interrompere un ciclo infinito, si può usare il comando break.

Esempio di ciclo infinito con break

n = 1

while True:  # Ciclo infinito
    print(n)
    n += 1
    if n > 5:
        break  # Interruzione del ciclo quando n diventa maggiore di 5

In questo esempio, il ciclo verrebbe eseguito all’infinito se non fosse per l’istruzione break, che ferma l’esecuzione quando n diventa maggiore di 5.


Il Ciclo for

Il ciclo for in Python itera su una sequenza di valori come liste, tuple, stringhe, o intervalli definiti con range(). Per ogni elemento della sequenza, il ciclo esegue il blocco di codice associato.

Sintassi del ciclo for

for variabile in sequenza:
    # Codice da eseguire per ogni elemento della sequenza
    pass  # Blocco vuoto, può essere sostituito dal codice effettivo

Esempio di ciclo for su una lista

frutta = ["mela", "banana", "arancia"]

for frutto in frutta:
    print(frutto)

Output:

mela
banana
arancia

Il ciclo itera su ogni elemento della lista frutta, assegnando il valore corrente alla variabile frutto e stampandolo.


Iterazione su stringhe

Il ciclo for può essere utilizzato anche per iterare su ogni carattere di una stringa.

Esempio di ciclo for su una stringa

parola = "Python"

for lettera in parola:
    print(lettera)

Output:

P
y
t
h
o
n

Iterazione con range()

La funzione range() viene spesso usata con i cicli for per generare una sequenza di numeri. Può essere utilizzata con uno, due o tre argomenti.

Sintassi di range()

  • range(fine) → genera numeri da 0 fino a fine - 1.
  • range(inizio, fine) → genera numeri da inizio fino a fine - 1.
  • range(inizio, fine, passo) → genera numeri da inizio fino a fine - 1, saltando di passo.

Esempio di ciclo for con range()

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

Output:

0
1
2
3
4

In questo esempio, il ciclo for itera sui numeri da 0 a 4 (valore di range(5)).

Esempio con range() che specifica inizio, fine e passo

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

Output:

1
3
5
7
9

In questo esempio, il ciclo for itera sui numeri da 1 a 9, saltando di 2 a ogni iterazione.


Cicli annidati

In Python è possibile annidare cicli, cioè inserire un ciclo all’interno di un altro. Questo è utile, ad esempio, per iterare su una matrice (lista di liste).

Esempio di cicli annidati

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

for riga in matrice:
    for elemento in riga:
        print(elemento, end=" ")
    print()  # Nuova riga dopo ogni riga della matrice

Output:

1 2 3 
4 5 6 
7 8 9 

Il ciclo esterno itera sulle righe della matrice, mentre il ciclo interno itera sugli elementi di ogni riga.


For inline (List Comprehension)

In Python, esiste una sintassi compatta e potente per creare nuove liste, chiamata list comprehension o for inline. Questa sintassi permette di generare una lista in una singola riga di codice, rendendo il codice più leggibile e conciso.

Le list comprehension sono utilizzate per trasformare o filtrare sequenze in modo efficiente, eliminando la necessità di scrivere cicli for espliciti.

Sintassi di base

[nome_variabile for nome_variabile in sequenza]

Esempio semplice: lista di quadrati

# Creare una lista contenente i quadrati dei numeri da 0 a 9
quadrati = [x**2 for x in range(10)]
print(quadrati)  # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

In questo esempio, la list comprehension genera una nuova lista con i quadrati di ogni numero da 0 a 9.

List comprehension con condizione (if inline)

È possibile aggiungere una condizione all’interno della list comprehension per includere solo gli elementi che soddisfano la condizione.

# Creare una lista contenente solo i numeri pari da 0 a 9
numeri_pari = [x for x in range(10) if x % 2 == 0]
print(numeri_pari)  # Output: [0, 2, 4, 6, 8]

In questo esempio, la list comprehension include solo i numeri pari (cioè quelli per cui x % 2 == 0).

Esempio complesso: lista di parole in maiuscolo

# Trasformare una lista di parole in maiuscolo utilizzando una list comprehension
parole = ["python", "è", "fantastico"]
parole_maiuscole = [parola.upper() for parola in parole]
print(parole_maiuscole)  # Output: ['PYTHON', 'È', 'FANTASTICO']

List comprehension con condizioni multiple

Puoi combinare più condizioni e trasformazioni all’interno della list comprehension per filtrare e modificare gli elementi della lista.

# Creare una lista dei quadrati dei numeri pari da 0 a 9
quadrati_pari = [x**2 for x in range(10) if x % 2 == 0]
print(quadrati_pari)  # Output: [0, 4, 16, 36, 64]

In questo esempio, vengono inclusi solo i quadrati dei numeri pari da 0 a 9.


Dizionario e Set Comprehension

La stessa logica delle list comprehension può essere applicata ai dizionari e ai set.

Dizionario Comprehension

# Creare un dizionario con i numeri e i loro quadrati
quadrati_dict = {x: x**2 for x in range(5)}
print(quadrati_dict)  # Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Set Comprehension

# Creare un set dei quadrati dei numeri da 0 a 4
quadrati_set = {x**2 for x in range(5)}
print(quadrati_set)  # Output: {0, 1, 4, 9, 16}