Cicli for annidati

Scarica zip esercizi

Naviga file online

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):

  1. for y in for x in range(3):
        print(x,y)
    
  2. for y in for x in range(2) in range(3):
        print(x,y)
    
  3. for y in range(3):
        for x in range(2):
            print(x,y)
    
  4. for x in range(2):
        for x in range(3):
            print(x)
        print(x)
    
  5. for x in range(2):
        for y in range(3):
            print(x,y)
        print(x,y)
    
  6. for x in range(1):
        for y in range(1):
            print(x,y)
    
  7. for x in range(2):
        for y in range(3):
            print(x,y)
    
  8. la = 'abc'
    for x in la:
        for y in la:
            print(x)
    
  9. for x in 'ab':
        for y in 'cd':
            print(x,y)
        for y in 'ef':
            print(x,y)
    
  10. for x in 'abc':
        for y in 'abc':
            if x == y:
                print(x)
    
  11. for x in 'abc':
        for y in 'abc':
            if x != y:
                print(x,y)
    
  12. lista = []
    for x in 'a':
        for y in 'bc':
            lista.append(x)
            lista.append(y)
    print(lista)
    
  13. lista = []
    for x in 'abc':
        for y in 'de':
            lista.append('z')
    print(len(lista))
    
  14. 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!
Mostra soluzione
[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
Mostra soluzione
[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
Mostra soluzione
[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
Mostra soluzione
[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
Mostra soluzione
[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
Mostra soluzione
[9]:

sa = 'bon'
sb = 'jour'

# scrivi qui


Prosegui

Continua con challenge for

[ ]: