Cicli for annidati
Scarica zip esercizi
E’ possibile includere un for
dentro l’altro, per esempio potremmo visitare tutte le parole di una lista di stringhe e per ogni parola stampare tutti i suoi caratteri:
[2]:
lista = ["vedo",
"una",
"luce"]
for stringa in lista:
for carattere in stringa:
print(carattere)
print()
v
e
d
o
u
n
a
l
u
c
e
Attenzione ai nomi di variabile
Quanto già detto in precedenza sul nome delle variabile vale ancor di più per i for
annidati:
II COMANDAMENTO Quando inserisci una variabile in un ciclo for
, questa variabile deve essere nuova
Se hai definito una variabile in un for
esterno, non la reintrodurrai in un for
interno, perchè ciò portebbe gran confusione. Per esempio qua s
è introdotta sia in quello esterno che in quello interno:
[3]:
for s in ['pallavolo', 'tennis', 'calcio', 'nuoto']:
for s in range(3): # inferno da debuggare, perdi la s del ciclo for esterno
print(s)
print(s) # stampa 2 invece che uno sport !
0
1
2
2
0
1
2
2
0
1
2
2
0
1
2
2
Domande - for annidati
Guarda i seguenti frammenti di codice, e per ciascuno cerca di indovinare quale risultato produce (o se da errore):
for y in for x in range(3): print(x,y)
for y in for x in range(2) in range(3): print(x,y)
for y in range(3): for x in range(2): print(x,y)
for x in range(2): for x in range(3): print(x) print(x)
for x in range(2): for y in range(3): print(x,y) print(x,y)
for x in range(1): for y in range(1): print(x,y)
for x in range(2): for y in range(3): print(x,y)
la = 'abc' for x in la: for y in la: print(x)
for x in 'ab': for y in 'cd': print(x,y) for y in 'ef': print(x,y)
for x in 'abc': for y in 'abc': if x == y: print(x)
for x in 'abc': for y in 'abc': if x != y: print(x,y)
lista = [] for x in 'a': for y in 'bc': lista.append(x) lista.append(y) print(lista)
lista = [] for x in 'abc': for y in 'de': lista.append('z') print(len(lista))
c = 1 for x in range(1,4): s = '' for y in range(1,4): s = s + str(c) c += 1 print(s)
Esercizio - casting
✪ Si vuole lanciare una nuova produzione videoculturale italo-nipponica e perciò vengono convocati gli attori per i provini. Il regista vuole provare una scena con tutte le possibili coppie che si possono formare tra attrici e attori. Scrivi del codice che stampa tutte le coppie, mettendo anche messaggi di introduzione.
NOTA: il numero di attori e attrici può essere diverso
Esempio - dati:
attrici = ['Licia','Mila']
attori = ['Capitan Harlock', 'Lupin', 'Kenshiro']
stampa:
Entri in scena Licia !
Entri in scena Capitan Harlock !
Licia e Capitan Harlock si preparino... CIAK!
Grazie Capitan Harlock - il prossimo !
Entri in scena Lupin !
Licia e Lupin si preparino... CIAK!
Grazie Lupin - il prossimo !
Entri in scena Kenshiro !
Licia e Kenshiro si preparino... CIAK!
Grazie Kenshiro - il prossimo !
Grazie Licia - la prossima !
Entri in scena Mila !
Entri in scena Capitan Harlock !
Mila e Capitan Harlock si preparino... CIAK!
Grazie Capitan Harlock - il prossimo !
Entri in scena Lupin !
Mila e Lupin si preparino... CIAK!
Grazie Lupin - il prossimo !
Entri in scena Kenshiro !
Mila e Kenshiro si preparino... CIAK!
Grazie Kenshiro - il prossimo !
Grazie Mila - la prossima !
Fine delle audizioni!
[4]:
attrici = ['Licia','Mila']
attori = ['Capitan Harlock', 'Lupin', 'Kenshiro']
# scrivi qui
Esercizio - coprire il piano
✪ Dati gli interi a
e b
, scrivi del codice che stampa tutte le coppie possibili di numeri \(x\) e \(y\) tali che \(1 \leq x \leq a\) e \(1 \leq y \leq b\)
Per esempio, per
a,b = 5,3
deve stampare
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
4 1
4 2
4 3
5 1
5 2
5 3
[5]:
a,b = 5,3
# scrivi qui
Esercizio - triangolare
✪ Dato l’intero a
, scrivi del codice che stampa tutte le coppie possibili di numeri \(x\) e \(y\) tali che \(0 \leq x \leq y < a\)
Per esempio, per
a = 5
deve stampare
0 0
0 1
0 2
0 3
0 4
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4
[6]:
a = 5
# scrivi qui
Esercizio - porto
✪ Scrivi del codice che data una lista parole
e una lista lettere
, per ogni parola calcola quante lettere contiene
vengono contati SOLO i caratteri presenti in
lettere
stampa il risultato SOLO se il numero è maggiore di zero
Esempio - date:
parole = ['barca','molo','remo','nassa','vela','strascico']
lettere = ['a','c','s']
stampa:
barca contiene 2 a
barca contiene 1 c
nassa contiene 2 a
nassa contiene 2 s
vela contiene 1 a
strascico contiene 1 a
strascico contiene 2 c
strascico contiene 2 s
[7]:
parole = ['barca','molo','remo','nassa','vela','strascico']
lettere = ['a','c','s']
# scrivi qui
Esercizio - poligoni
✪✪ Data una lista poligoni
con nomi di poligoni ordinati per numero di lati a partire dal triangolo, scrivi del codice che stampa tutte le possibili domande che si possono formare riguardo il numero di lati. Parti da un minimo di 3 lati fino ad un massimo corrispondente al numero di lati dell’ultimo poligono (ricordati che i nomi sono ordinati per numero di lati!)
Esempio - data:
# 0 1 2 3
poligoni = ["Il triangolo","Il quadrato","Il pentagono", "L'esagono"]
stampa
Il triangolo ha 3 lati? True
Il triangolo ha 4 lati? False
Il triangolo ha 5 lati? False
Il triangolo ha 6 lati? False
Il quadrato ha 3 lati? False
Il quadrato ha 4 lati? True
Il quadrato ha 5 lati? False
Il quadrato ha 6 lati? False
Il pentagono ha 3 lati? False
Il pentagono ha 4 lati? False
Il pentagono ha 5 lati? True
Il pentagono ha 6 lati? False
L'esagono ha 3 lati? False
L'esagono ha 4 lati? False
L'esagono ha 5 lati? False
L'esagono ha 6 lati? True
[8]:
# 0 1 2 3
poligoni = ["Il triangolo","Il quadrato","Il pentagono", "L'esagono"]
# scrivi qui
Esercizio - bon jour
✪✪✪ Date due stringhe sa
e sb
in minuscolo, scrivi del codice che stampa a turno tutte le lettere di sa
in maiuscolo seguite da tutte le possibili combinazioni di sb
che abbiano UNA SOLA lettera maiuscola.
Esempio - date:
sa = 'bon'
sb = 'jour'
Deve stampare:
B Jour
B jOur
B joUr
B jouR
O Jour
O jOur
O joUr
O jouR
N Jour
N jOur
N joUr
N jouR
[9]:
sa = 'bon'
sb = 'jour'
# scrivi qui
Prosegui
Continua con challenge for
[ ]: