Cicli for 8 - Challenges
Scarica zip esercizi
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.
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.
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 nientemonte =
)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
Stampare (non serve memorizzare!) le stanze dei maschi
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 possibilecompetitor
: lista di competitor con dati(nome_competitor, insieme_categorie_merci)
Scrivi del codice che
Stampa le categorie che non sono vendute da nessun competitor
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