Questo sito utilizza cookie per raccogliere dati statistici.
Privacy Policy
# 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`
```python
while condizione:
# Codice da eseguire finché la condizione è vera
pass # Blocco vuoto, può essere sostituito dal codice effettivo
```
### Esempio di ciclo `while`
```python
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`
```python
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`
```python
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
```python
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
```python
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()`
```python
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
```python
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
```python
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
```python
[nome_variabile for nome_variabile in sequenza]
```
### Esempio semplice: lista di quadrati
```python
# 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.
```python
# 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
```python
# 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.
```python
# 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
```python
# 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
```python
# 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}
```