Cicli for 8 - Challenges

Scarica zip esercizi

Naviga file online

Proponiamo ora degli esercizi senza soluzione, accetti la sfida?

Sfide range

Sfida - ascensore a 10 piani

✪✪ Requisiti: if annidati, cicli for, range negativi

Questa sfida è come ascensore a 2 piani, ma in questo caso le posizioni dell’ascensore e dell’utente sono memorizzate come interi da 0 a 10.

Esempio - dati:

piano_utente = 3; piano_ascensore = 7

STAMPA:

7
6
5
4
3
DING!
[1]:

piano_utente = 3; piano_ascensore = 7    # 7,6,5,4,3,DING!
#piano_utente = 5; piano_ascensore = 0   # 0,1,2,3,4,5,DING!
#piano_utente = 3; piano_ascensore = 3   # DING!
#piano_utente = 4; piano_ascensore = 6   # 6,5,4,DING!
#piano_utente = 6; piano_ascensore = 4   # 4,5,6,DING!

# scrivi qui


Sfide con stringhe

Sfida - PALAZZO

✪ Requisiti: metodi stringhe, for

Data una parola, per ogni carattere stampare l’indice, il carattere in minuscolo e il carattere in maiuscolo. Ci sono due modi principali per svolgere l’esercizio, usando range e senza usare range. Prova a trovare entrambe le soluzioni

Esempio - data:

parola = 'palazzo'

stampa:

0 p P
1 a A
2 l L
3 a A
4 z Z
5 z Z
6 o O
[2]:

parola = 'palazzo'

# scrivi qui


Sfide con liste

Sfida - La ricetta della nonna

✪✪ Requisiti: stringhe, liste, if, for

La nonna ci ha dato la sua miracolosa ricetta della pasta olive acciughe e capperi.

Dobbiamo andare a comprare gli ingredienti e dobbiamo capire quanti capperi, olive e pepe comprare. Di pasta e altri ingredienti ne abbiamo già in quantità, quindi non ci interessano.

  • ATTENZIONE: la nonna ha la sua età ed è sempre stata pasticciona e quindi la ricetta è scritta in modo non consistente, e le parole vanno normalizzate

  • SUGGERIMENTO: c’è un comodo metodo delle stringhe per separare le parole…

Esempio - dati:

ricetta = "oliva\t, pepe,cappero ,\n detersivo,\t \n cappero, peperone, acciuga ,oliva , pepe\t,\t cappero , \noliva,pasta\n"

stampa:

Servono:
   3 oliva
   2 pepe
   3 cappero
[3]:


#          0        1    2           3               4        5         6        7       8         9           10    11
ricetta = "oliva\t, pepe,cappero ,\n detersivo,\t \n cappero, peperone, acciuga ,oliva , pepe\t,\t cappero , \noliva,pasta\n"
#ricetta = "cappone , pepe,\noliva\n,\n\tpepe, acciuga "   #  1 oliva 2 pepe 0 cappero

# scrivi qui


Sfida - testo storto

✪✪ Requisiti: stringhe, liste, if, for

Dato un testo di caratteri con diversa capitalizzazione, metti nella variabile tradotto il testo con la capitalizzazione invertita e poi STAMPALO

  • SUGGERIMENTO: per verificare se un carattere è minuscolo, usa il metodo .islower()

Esempio - dato:

testo = "CiAo QuEsTo E' uN TeStO sToRto"

dopo il tuo codice dovrebbe risultare:

>>> print(tradotto)
cIaO qUeStO e' Un tEsTo StOrTO
[4]:

testo = "CiAo QuEsTo E' uN TeStO sToRto"   # cIaO qUeStO e' Un tEsTo StOrTO
#testo = "gInGillo"                        # GiNgILLO
tradotto = ''

# scrivi qui


Sfida - Gioco dell’Ordine

✪✪ Requisiti: stringhe, liste, sort, if, for

Le regole del gioco dell’Ordine sono le seguenti: ci sono sul tavolo 24 gettoni, ognuno con una lettera diversa dell’alfabeto scritta sopra. Due giocatori si sfidano raccogliendo a caso un gettone e quando hanno cinque gettoni inizia la battaglia. Durante la battaglia ciascun giocatore gioca la pedina con la lettera più alta che possiede. Vince al gioco chi è il primo giocatore a posizionare tutte le pedine.

  1. In questo esercizio abbiamo in input le due liste di pedine. Dobbiamo aggiungere un etichetta che ci dice per ciascuna pedina a quale giocatore appartiene. Successivamente calcoliamo qual’è l’ordine delle giocate.

  2. Dopo aver trovato l’ordine delle giocate, prova anche a stampare quale giocatore ha vinto la battaglia!

Esempio - dati:

giocatore1 = ["h", "b", "f", "d", "x"]
giocatore2 = ["e", "c", "g", "a", "z"]

dopo il tuo codice, deve stampare:

['z_2', 'x_1', 'h_1', 'g_2', 'f_1', 'e_2', 'd_1', 'c_2', 'b_1', 'a_2']
[5]:

giocatore1 = ["h", "b", "f", "a", "x"]
giocatore2 = ["e", "c", "g", "d", "z"]

# scrivi qui


Sfida - Monte ordinato

✪✪ Requisiti: liste, sort, for

Data una lista monte con \(n\) numeri (supponi che \(n\) sia pari), scrivi del codice che MODIFICA monte, ordinando solo i numeri nella prima metà in ordine crescente e poi ordinando solo i numeri nella seconda metà in ordine inverso

  • NON riassegnare monte, perchè perderesti la zona di memoria originale (quindi niente monte =)

  • SUGGERIMENTO: sort() funziona solo su tutta la lista, per ordinarne solo metà dovrai creare altre liste dove mettere i valori da ordinare, e poi copiarli nella lista originale

Esempio - data:

monte = [90,40,50,20,60, 7, 3, 4, 9, 8]

Dopo il tuo codice deve risultare:

>>> print(monte)
[20, 40, 50, 60, 90, 9, 8, 7, 4, 3]
[6]:

monte = [90,40,50,20,60, 7, 3, 4, 9, 8]   # [20, 40, 50, 60, 90, 9, 8, 7, 4, 3]
#monte = [5,0,3,4,3,8]                    # [0, 3, 5, 8, 4, 3]
#monte = []                               # []
#monte = [7,3]                            # [7,3]

# scrivi qui


Sfida - Gita scolastica

✪✪✪ Requisiti: stringhe, liste, if, for, range

Siamo professori nel rinomato liceo della città. E’ giunto il periodo dell’anno in cui si devono organizzare le gite scolastiche. Quest’anno avremo l’incredibile opportunità di dormire nelle stanze di un vero castello medioevale!

Abbiamo quindi una lista di studenti sia maschi che femmine che parteciperanno alla gita e siccome durerà qualche giorno dobbiamo predisporre le stanze per l’albergo.

  • per i maschi abbiamo a disposizione stanze da 3 letti.

  • per le femmine abbiamo stanze da 3 letti

Assegneremo le persone nelle stanze in base all’ORDINE ALFABETICO.

  • i primi 3 maschi andranno nella prima stanza

  • i maschi dal quarto al sesto andranno nella seconda, etc

  • le prime 3 femmine, prima stanza

  • dalla 4 alla 6, seconda stanza, etc

SUGGERIMENTO: se abbiamo 14 studenti maschi da dividere in stanze da 3 vengono: 4 stanze da 3 più una da 2. Vale a dire, 14 // 3  = 4 (divisione intera, se non si mettesse // verrebbe 4.666666666666667)

Alla fine, l’ultima stanza potrebbe essere incompleta ma ci va bene così.

CONSEGNA:

1.a) Dividere la lista in due NUOVE liste di maschi e femmine

1.b) Togliere il prefisso "M_" e "F_" dai nomi

  1. Stampare (non serve memorizzare!) le stanze dei maschi

  2. Stampare (non serve memorizzare!) le stanze delle femmine

Esempio - dati:

[7]:
# Qui abbiamo una classe molto piccola, ma cerchiamo lo stesso di fare le stanze
studenti = ['M_Alessandro', 'F_Alessia', 'F_Alice', 'M_Andrea', 'F_Anna', 'F_Arianna',
            'F_Aurora', 'F_Beatrice', 'F_Bianca', 'F_Camilla', 'M_Federico', 'M_Francesco']

Il tuo codice dovrebbe STAMPARE:

1.a)  maschi = ['M_Alessandro', 'M_Andrea', 'M_Federico', 'M_Francesco']
      femmine = ['F_Alessia', 'F_Alice', 'F_Anna', 'F_Arianna', 'F_Aurora',
                 'F_Beatrice', 'F_Bianca', 'F_Camilla']

1.b)  maschi = ['Alessandro', 'Andrea', 'Federico', 'Francesco']
      femmine = ['Alessia', 'Alice', 'Anna', 'Arianna', 'Aurora', 'Beatrice',
                 'Bianca', 'Camilla']

2)    Stanza maschi 1: ['Alessandro', 'Andrea', 'Federico']
      Stanza maschi 2: ['Francesco']

3)    Stanza femmine 1: ['Alessia', 'Alice', 'Anna']
      Stanza femmine 2: ['Arianna', 'Aurora', 'Beatrice']
      Stanza femmine 3: ['Bianca', 'Camilla']
[8]:

studenti = ['M_Alessandro', 'F_Alessia', 'F_Alice', 'M_Andrea', 'F_Anna', 'F_Arianna', 'F_Aurora',
            'F_Beatrice', 'F_Bianca', 'F_Camilla', 'F_Chiara', 'M_Federico', 'M_Francesco', 'M_Gabriele',
            'F_Gaia', 'F_Ginevra', 'F_Giorgia', 'F_Giulia', 'M_Giuseppe', 'F_Greta', 'M_Leonardo', 'M_Lorenzo',
            'F_Ludovica', 'M_Matteo', 'M_Mattia', 'M_Merlino','F_Nicole', 'M_Nicolo', 'F_Noemi', 'M_Riccardo',
            'F_Sara', 'F_Sofia', 'M_Tommaso', 'F_Vittoria']

# scrivi qui:


Sfide con insiemi

Sfida - Nuovi Mercati

✪✪ Requisiti: liste, insiemi, if, for

Abbiamo qualche milione da investire nell’apertura di una nuova attività commerciale. Prima di tutto però ci serve sapere quali negozi non sono disponibili a Trento in maniera da evitare di aprire l’ennesimo negozio di abbigliamento casual (E rischiare di andare in perdita!)

INPUT:

  • categorie: insieme di tutte le categorie possibile

  • competitor: lista di competitor con dati (nome_competitor, insieme_categorie_merci)

Scrivi del codice che

  1. Stampa le categorie che non sono vendute da nessun competitor

  2. Calcola per ogni categoria, da quanti competitor è venduta

Esempio - dati:

categorie = {a, b, c, d, e, f}
competitor = [("pippo", {a, c, e}), ("pluto", {c, d, e})]

il tuo codice deve stampare:

"Le categorie disponibili sono: {b, f}"
Categorie vendute da competitor:

[(a, 1), (b, 0), (c, 2), (d, 1), (e, 2), (f,0)]
[9]:

# INPUT (NON modificare)
categorie = {"Ferramenta", "Ortofrutta", "Abbigliamento sportivo", "Gioielleria", "Cosmetici", "Pesce", "Alcolici", "Forniture Elettriche", "Telefonia"}
competitor = [
        ("GenerStore", {"Ortofrutta", "Abbigliamento sportivo", "Gioielleria", "Pesce", "Alcolici"}),
        ("MomentiElettrizzanti", {"Abbigliamento sportivo", "Videogames", "Gioielleria", "Alcolici", "Forniture Elettriche"}),
        ("TuttoEDiPiù", {"Videogames", "Gioielleria", "Pesce", "Alcolici", "Forniture Elettriche"}),
        ("ProfumoDiBuono", {"Pesce", "Alcolici", "Forniture Elettriche"}),
        ("PessimeCombo", {"Alcolici", "Telefonia"}),
]

# scrivi qui


Sfide con dizionari

Sfida - dondolo

✪ Requisiti: stringhe, dizionari, if, cicli

Scrivi del codice che data una lista di parole costituite solo dalla stessa lettera, crea un dizionario freq che associa a ciascuna lettera il numero di occorrenze di quella lettera trovate in tutta la lista

Esempio - data:

parole = ['dddd', 'oooo', 'nnn', 'dddd', 'o', 'lllllll', 'oo']

deve risultare:

>>> print(freq)
{'d': 8, 'o': 7, 'n': 3, 'l': 7}
[10]:

parole = ['dddd', 'oooo', 'nnn', 'dddd', 'o', 'lllllll', 'oo']  # {'d': 8, 'o': 7, 'n': 3, 'l': 7}
#parole = ['d','ii','nnn','dd','ooo','n']                        # {'d': 3, 'i': 2, 'n': 4, 'o': 3}

# scrivi qui


Sfida - Interpol db

✪✪ Requisiti: stringhe, liste, dizionari, for

Un numero sempre crescente di hackers finanziati da regimi dittatoriali attaccano senza tregua l’infrastruttura informatica di nazioni rivali allo scopo di destabilizzarle, colpendo anche aziende per rubare proprietà intellettuale. L’Interpol vi richiede di sviluppare un database dei gruppi hacker più pericolosi.

Dato un nome di un gruppo hacker, si vuole sapere rapidamente se se è presente un dossier che li riguarda. Vi vengono fornite due liste, una con i nomi ufficiali dei gruppi, e una con il corrispondente dossier. Per quanto sia possibile effettuare una ricerca nelle lista, questa potrebbe risultare troppo lenta. Vi si chiede quindi di memorizzare il contenuto delle due liste in un opportuno dizionario db che associ i nomi dei gruppi hacker al rispettivo numero di dossier. Visto che l’agente che effettuerà le ricerche potrebbe scrivere i nomi dei gruppi in modi diversi, nel dizionario mettere anche come chiavi possibili variazioni dei nomi.

ATTENZIONE:

  • PRIMA costruire il dizionario db

  • … e solo POI effettuare la ricerca usando solo db e con UNA SOLA riga di codice

Esempio 1 - dati:

nomi =    ['hacKnights','Cult  of  Cobra','unsafe\nKreW']
dossier = ['hack.odt','cobra.odt','unsafe.docx']

con questa ricerca per chiave nel dizionario db:

ricerca = 'hacKnights'

deve stampare:

hacKnights è documentato nel dossier 'hack.odt'

Esempio 2 - data:

ricerca = 'CULT OF COBRA'

deve stampare:

CULT OF COBRA è documentato nel dossier cobra.odt

Per altri test, vedere sotto

[11]:

db = {}

nomi =     ['hacKnights','Cult  of  Cobra','unsafe\nKreW']
dossier =  ['hack.odt','cobra.odt','unsafe.docx']

# Ricerca 'tale e quale':
ricerca = 'hacKnights'         # hack.odt
#ricerca = 'Cult  of  Cobra'   # cobra.odt
#ricerca = 'unsafe\nKreW'      # unsafe.docx

# Ricerca su variazioni della normalizzazione:
#ricerca = 'hacknights'      # hack.odt
#ricerca = 'HACKNIGHTS'      # hack.odt
#ricerca = 'Hacknights'      # hack.odt
#ricerca = 'cult of cobra'   # cobra.odt
#ricerca = 'CULT OF COBRA'   # cobra.odt
#ricerca = 'Cult of cobra'   # cobra.odt
#ricerca = 'unsafe krew'     # unsafe.docx
#ricerca = 'Unsafe krew'     # unsafe.docx
#ricerca = 'UNSAFE KREW'     # unsafe.docx

# scrivi qui