Python - Cicli nidificati
Ciao, aspiranti programmatori! Oggi, immergeremo nel fascinante mondo dei cicli nidificati in Python. Come il vostro insegnante di computer amichevole, sono entusiasta di guidarvi in questa avventura. Credetemi, alla fine di questa lezione, sarete in grado di creare cicli come dei professionisti!
Cos'è un Ciclo Nidificato?
Prima di immergerci nel profondo, iniziamo con le basi. Immagina di organizzare il tuo armadio. Passi ogni ripiano (quello è un ciclo), e per ogni ripiano, ordini tutti gli oggetti su di esso (ecco un altro ciclo all'interno del primo). Questo è essenzialmente cosa sono i cicli nidificati nella programmazione: cicli all'interno di cicli!
Ciclo for nidificato in Python
Iniziamo con il ciclo for
, che è come un vecchio amico affidabile nel mondo di Python.
Struttura di Base
Ecco la struttura generale di un ciclo for nidificato:
for variabile_esterna in sequenza_esterna:
# Corpo del ciclo esterno
for variabile_interna in sequenza_interna:
# Corpo del ciclo interno
Esempio Semplice: Tabella di Moltiplicazione
Creiamo una semplice tabella di moltiplicazione per capire meglio:
for i in range(1, 6):
for j in range(1, 6):
print(f"{i} x {j} = {i*j}", end="\t")
print() # Passa alla riga successiva dopo ogni riga
Questo codice produrrà:
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 1 x 4 = 4 1 x 5 = 5
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25
Spiegazione:
- Il ciclo esterno (
for i in range(1, 6)
) si esegue 5 volte, rappresentando le righe. - Per ogni iterazione del ciclo esterno, il ciclo interno (
for j in range(1, 6)
) si esegue 5 volte, rappresentando le colonne. - Stampiamo ogni risultato di moltiplicazione, usando
end="\t"
per aggiungere uno spazio di tabulazione invece di una nuova riga. - Dopo ogni riga (iterazione del ciclo esterno), stampiamo una riga vuota per passare alla riga successiva.
Esempio del Mondo Reale: Disposizione dei Posti
Immagina di essere un insegnante (come me!) che organizza i posti per una classe. Creiamo una tabella di sedute:
students = ["Alice", "Bob", "Charlie", "David", "Eve"]
rows = 3
seats_per_row = 2
seat_number = 0
for row in range(1, rows + 1):
print(f"Riga {row}:")
for seat in range(1, seats_per_row + 1):
if seat_number < len(students):
print(f" Posto {seat}: {students[seat_number]}")
seat_number += 1
else:
print(f" Posto {seat}: Vuoto")
print() # Linea vuota tra le righe
Questo produrrà:
Riga 1:
Posto 1: Alice
Posto 2: Bob
Riga 2:
Posto 1: Charlie
Posto 2: David
Riga 3:
Posto 1: Eve
Posto 2: Vuoto
In questo esempio:
- Il ciclo esterno itera attraverso ogni riga.
- Il ciclo interno assegna gli studenti ai posti in ogni riga.
- Utilizziamo una variabile
seat_number
per tenere traccia di quale studente stiamo assegnando dopo. - Se finiamo gli studenti, contrassegniamo i posti rimanenti come "Vuoto".
Ciclo while nidificato in Python
Ora, incontriamo il cugino del ciclo while
– il ciclo while
nidificato. È come una guardia attenta che continua a controllare una condizione.
Struttura di Base
Ecco come appare tipicamente un ciclo while nidificato:
while condizione_esterna:
# Corpo del ciclo esterno
while condizione_interna:
# Corpo del ciclo interno
Esempio: Piramide di Numeri
Creiamo una piramide di numeri per vedere i cicli while nidificati in azione:
row = 1
while row <= 5:
col = 1
while col <= row:
print(col, end=" ")
col += 1
print() # Passa alla riga successiva
row += 1
Questo produrrà:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
Spiegazione:
- Il ciclo
while
esterno controlla il numero di righe (da 1 a 5). - Per ogni riga, il ciclo
while
interno stampa numeri da 1 al numero della riga corrente. - Incrementiamo
col
all'interno del ciclo interno erow
all'interno del ciclo esterno.
Esempio del Mondo Reale: Controllo dell'Inventario
Immagina di gestire un piccolo negozio. Devi controllare regolarmente l'inventario. Simuliamo questo con cicli while nidificati:
inventory = {
"mele": 50,
"banane": 30,
"arance": 40
}
days = 1
while days <= 3: # Controlla per 3 giorni
print(f"Giorno {days} Controllo dell'Inventario:")
for fruit, quantity in inventory.items():
while quantity > 0:
print(f"Controllando {fruit}...")
quantity -= 10 # Simula la vendita di 10 unità per controllo
if quantity <= 20:
print(f"Avviso di scarsità per {fruit}! Solo {quantity} rimasti.")
break # Smetti di controllare questo frutto se la scorta è bassa
inventory[fruit] = quantity # Aggiorna l'inventario
print(f"Fine del Giorno {days} Inventario: {inventory}\n")
days += 1
Questo produrrà qualcosa del genere:
Giorno 1 Controllo dell'Inventario:
Controllando mele...
Controllando mele...
Controllando mele...
Avviso di scarsità per mele! Solo 20 rimasti.
Controllando banane...
Avviso di scarsità per banane! Solo 20 rimasti.
Controllando arance...
Controllando arance...
Avviso di scarsità per arance! Solo 20 rimasti.
Fine del Giorno 1 Inventario: {'mele': 20, 'banane': 20, 'arance': 20}
Giorno 2 Controllo dell'Inventario:
Controllando mele...
Avviso di scarsità per mele! Solo 10 rimasti.
Controllando banane...
Avviso di scarsità per banane! Solo 10 rimasti.
Controllando arance...
Avviso di scarsità per arance! Solo 10 rimasti.
Fine del Giorno 2 Inventario: {'mele': 10, 'banane': 10, 'arance': 10}
Giorno 3 Controllo dell'Inventario:
Controllando mele...
Avviso di scarsità per mele! Solo 0 rimasti.
Controllando banane...
Avviso di scarsità per banane! Solo 0 rimasti.
Controllando arance...
Avviso di scarsità per arance! Solo 0 rimasti.
Fine del Giorno 3 Inventario: {'mele': 0, 'banane': 0, 'arance': 0}
In questo esempio:
- Il ciclo
while
esterno simula il controllo dell'inventario per 3 giorni. - Utilizziamo un ciclo
for
per iterare attraverso ogni frutto nell'inventario. - Il ciclo
while
interno simula il controllo e la vendita di ogni frutto fino a quando non è scarso o esaurito. - Utilizziamo
break
per smettere di controllare un frutto se la quantità scende a 20 o meno.
Conclusione
Congratulazioni! Avete appena padroneggiato l'arte dei cicli nidificati in Python. Ricordate, i cicli nidificati sono strumenti potenti, ma usateli con saggezza. Possono rendere il vostro codice più lento se non utilizzati in modo efficiente.
Come per tutti i concetti di programmazione, la pratica fa l'artigiano. Provate a creare i vostri scenari di cicli nidificati – magari una configurazione della scacchiera, o un programma settimanale per la scuola. Le possibilità sono infinite!
Seguite a programmare, a imparare, e, più importante, divertitevi! Fino alla prossima volta, questo è il vostro insegnante di computer amichevole che firma off. Buon looping!
Credits: Image by storyset