Dizionari 6 - Challenges

Scarica zip esercizi

Naviga file online

Proponiamo ora degli esercizi senza soluzione, accetti la sfida?

Sfida - Nozze di platino

✪ Requisiti: dizionari

Al tranquillissimo paesello di Gerontonia vi sono delle coppie assai tenaci che dopo 75 anni dal fatico “Sì!” meritano di festeggiare le nozze di platino. Abbiamo una lista dei matrimoni con esattamente 3 coppie scritte nel formato “maschio-femmina”, e vogliamo creare un dizionario diz che associa ad ogni maschio la corrispondente compagna.

  • assumi che i nomi dei maschi siano tutti diversi e che vi siano esattamente 3 coppie

Esempio - data:

matrimoni = ["Amilcare-Genoveffa", "Oronzo-Eusonia", "Venceslao-Elvira"]

dopo il tuo codice, deve risultare:

>>> print(diz)
{'Amilcare': 'Genoveffa',
 'Oronzo': 'Eusonia',
 'Venceslao': 'Elvira'}
[1]:

matrimoni = ["Amilcare-Genoveffa", "Oronzo-Eusonia", "Venceslao-Elvira"]
#matrimoni = ["Liutprando-Brunilde", "Clodoveo-Pancrazia", "Evaristo-Ubalda"]

# scrivi qui


Sfida - I pescatori

✪ Requisiti: dizionari

Una compagnia di pescatori ogni giorno cattura dei pesci che poi rivende a vari ristoranti. Ogni ristorante richiede diversi specie di pesci. Dati un ristorante e dei pesci, scrivi del codice che stampa True se il ristorante cucina quei pesci, altrimenti stampa False.

[2]:

ristorante, pesci = "Il Galeone", "carpe"            # True
#ristorante, pesci = "Il Galeone", "aringhe"         # False
#ristorante, pesci = "Al Molo",    "trote"           # True
#ristorante, pesci = "Al Molo",    "orate"           # False
#ristorante, pesci = "La Cambusa", "merluzzi"        # False


registro = {
    "L'Ancora"  : ['aringhe', 'carpe'],
    "Il Galeone": ['merluzzi', 'carpe', 'trote'],
    "Al Molo"   : ['trote'],
    "La Cambusa": ['aringhe', 'carpe'],
}

# scrivi qui


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}
[3]:

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

# scrivi qui


Sfida - Interpol db

✪✪ Requisiti: stringhe, liste, dizionari, cicli

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

[4]:

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


Sfida - Precariato ad Altomuro

Requisiti: dizionari, liste, strutture composte

NOTA: Questo esercizio è simile alla sfida Precariato a Murabasso, con la differenza che usa una struttura dati più comoda.

Siamo nel 2020 e ANCHE per Gian Antonia da Torri di Altomuro il lavoro fisso è ormai un miraggio. Ogni mese si giostra tra vari lavoretti e, siccome è una persona un po’ più ordinata, tiene un registro di tutti i lavoretti part time ed occasionali che svolge per portare a casa la pagnotta.

A differenza di Pier Giorgio che usa liste di liste, Gian Antonia usa una lista di dizionari… Avrà maggior fortuna di Pier Giorgio?

I dati sono salvati un una lista di dizionari, in cui ogni elemento è così composto:

{"nome": "Pettinatura pitoni",
 "valore": 700,
 "status": "pagato"}

Si sta sempre avvicinando il momento di compilare la dichiarazione dei redditi e Gian Antonia avrebbe bisogno di sapere quanti soldi ha incassato finora e quanti se ne deve ancora aspettare. In più le piacerebbe sapere quale è stato il lavoro più redditizio dell’anno (GIA’ PAGATO)

  1. Calcolare il totale già ricevuto e il totale da ricevere ancora

  2. Trovare il lavoro GIA’ PAGATO più redditizio

Esempio - dati:

lavori = [
            {"nome": "Pettinatura pitoni", "valore": 1000, "status": "pagato"},
            {"nome": "Straordinari in fonderia", "valore": 175.13, "status": "non pagato"}
]

Stampa:

1. Totale ricevuto: 1000
   Totale da ricevere: 175.13
2. Il lavoro più pagato finora è: Pettinatura pitoni
[5]:

lavori = [
    {"nome": "Ripetizioni statistica", "valore":300, "status":"pagato"},
    {"nome": "Part time gelateria", "valore":450, "status":"non pagato"},
    {"nome": "Rendita investimenti", "valore":500, "status":"pagato"},
    {"nome": "Installazione artistica", "valore":600, "status":"non pagato"},
    {"nome": "Vendita zafferano", "valore":700, "status":"pagato"},
    {"nome": "Noleggio scarpe eleganti", "valore":100, "status":"non pagato"}
]

# scrivi qui


1.  Totale ricevuto:  1500
    Totale da ricevere:  1150
2.  Il lavoro più pagato finora è:  Vendita zafferano