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 afine - 1.range(inizio, fine)→ genera numeri dainiziofino afine - 1.range(inizio, fine, passo)→ genera numeri dainiziofino afine - 1, saltando dipasso.
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}