laboratorio di python - plone sitecs.unibo.it/~zuppirol/lez8.pdflaboratorio di python dizionari,...

28
Correzione esercizi Domande sul Progetto Dizionari Laboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013 Sara Zuppiroli Laboratorio di Python

Upload: others

Post on 05-Jun-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Laboratorio di PythonDizionari, Esercizi su dizionari

Sara Zuppiroli

Università di Bologna

24 aprile e 3 maggio 2013

Sara Zuppiroli Laboratorio di Python

Page 2: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Sommario

1 Correzione esercizi

2 Domande sul Progetto

3 Dizionari

Sara Zuppiroli Laboratorio di Python

Page 3: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Estrazione senza reinserimento

Estrarre 10 carte da un mazzo di 40 senza reinserirle nel mazzo

def estrazione():mazzo=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,

19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, 34,35,36,37,38,39,40]

e=random.sample(s,10) #estraggo senza reinserimento come fareturn e #codesto metodo

Restituisce errore perché?

Sara Zuppiroli Laboratorio di Python

Page 4: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Estrazione senza reinserimento

Estrarre 10 carte da un mazzo di 40 senza reinserirle nel mazzo

def estrazione_briscola_noreinserimento():Semi=["Bastoni", "Coppe", "Denara", "Spade"]Numeri=["Asso",2,3,4,5,6,7,"Fante","Cavallo","Re"]result=[]while len(result)<10:#compie 10 estrazioni

S1=random.choice(Numeri)#scelta casuale numeriS2=random.choice(Semi)#scelta casuale semifinal=str(S1)+ " di " +S2if final not in result:

#se c'e' gia' non la prende e quindi continua#ad iterare. se non c'e' allora aggiunge a result.result.append(final)

return result

Cos’é sbagliato? Che tipo di errore é questo?

Sara Zuppiroli Laboratorio di Python

Page 5: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Domande

Quando viene definita una frase viene detto che é delimitata daqualsiasi segno di punteggiatura: quindi tutti i segni li elencaticome punteggiatura? anche l’a-capo e la virgola per quantoriguarda i segni di punteggiatura: nel testo ne sono elencati soloalcuni, ma per esempio i segni come > e <, che di solito apronoun discorso diretto, vanno da considerarsi come limiti di frasi?Suddivisione delle frasi: Pippo, pluto. paperino; /n Paperone.Quante frasi sono?Quando si dice numero di lettere si intende lettere dell’alfabetosolamente o anche cifre e punteggiatura?

Sara Zuppiroli Laboratorio di Python

Page 6: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Domande

Per quanto riguarda tutti i caratteri speciali come (&, %, Û, ecc..)sono da considerarsi tra segni di punteggiatura o segnialfabetici?Quando si legge un file, se in esso vi sono dei tab o altri comandisimili vengono trasformati int ecc. a seconda dei casi oppure si deve ripulire il testo da questiin modo che non vi sia un conteggio errato delle lettere?

Sara Zuppiroli Laboratorio di Python

Page 7: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Definizione e Inizializzazione

I dizionari sono sequenze mutabile. I dizionari hanno un indicechiamato chiave. La chiave é definibile da un qualunque tipoimmutabile.Per inzializzare un dizionario d si usa il comando:

d = {}

Sara Zuppiroli Laboratorio di Python

Page 8: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Definizione e Assegnazione

d = {chiave : val , chiave2 : val , · · · }chiave puó essere di tipo stringa, intero, tupla, ecc... qualsiasi

tipo immutabileVal puó essere definito qualsiasi tipo anche un dizionario

stessoAd esempio:d = {′vocali ′ : (′a′,′ e′,′ i ′,′ o′,′ u′),′ consonanti ′ :(′b′,′ c′, ...),′ punteggiatura′ : (′:′,′ ;′ )}

chiavi del nostro dizionario sono: ’vocali’, ’consonanti’ ,’punteggiatura’

valori referenziati dalle rispettive chiavi sono (’a’,’e’,’i’,’o’,’u’);(’b’,’c’, ...); (’,’,’;’)

Sara Zuppiroli Laboratorio di Python

Page 9: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Operazioni sui dizionari

Modifica : d[’vocali’] = (’a’,’e’,’i’,’o’,’u’, ’A’,’E’, ’I’, ’O’,’U’)→ modificala chiave giá presente con i valori a destra dell’uguale

Assegnazione : d[’alfabeto’]=(’a’,’b’, ... )→ associa alla variabile duna nuova chiave con i valori a destra dell’uguale

Cancellazione : del d[’consonanti’]→ cancella da d la chiave e ivalori ad essa associati

Numero di coppie chiave valore len(d)→ conta il numero di coppiechiave valore presenti nel dizionario d

Sara Zuppiroli Laboratorio di Python

Page 10: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Metodi dei dizionari versione 2.x

keys : d.keys→ ritorna la lista delle sue chiavivalues d.values→ ritorna la lista dei valori in un dizionario

has_key → d.has_key(’vocali’) prende come argomento unachiave e ritorna (1) se la chiave é presente neldizionario 0 altrimenti

d.clear() : → metodo per cancellare tutti gli elementi da undizionario.

Sara Zuppiroli Laboratorio di Python

Page 11: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Metodi key and values versione 3.x

keys : d.keys→ ritorna la vista dinamica delle chiavivalues d.values→ ritorna la vista dinamica dei valori

Sara Zuppiroli Laboratorio di Python

Page 12: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Python 3.x

>>>d={'vocali': ('a','e','i','o','u'), 'consonanti': ('b','c', ...)}>>> ks = d.keys()>>> kv = d.values()>>> print(ks)(['vocali', 'consonanti'])>>> print(kv)([('a','e','i','o','u'),('b','c', ...) ])>>> d['punteggiatura'] = (':',';')>>> print(ks)([vocali', 'consonanti' 'punteggiatura'])>>> print(kv)([('a','e','i','o','u'),('b','c', ...), (':',';')])

Sara Zuppiroli Laboratorio di Python

Page 13: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Python 2.x

>>>d={'vocali': ('a','e','i','o','u'), 'consonanti': ('b','c', ...)}>>> ks = d.keys()>>> kv = d.values()>>> print(ks)['vocali', 'consonanti']>>> print(kv)[('a','e','i','o','u'),('b','c', ...) ]>>> d['punteggiatura'] = (':',';')>>> print(ks)['vocali', 'consonanti']>>> print(kv)[('a','e','i','o','u'),('b','c', ...) ]

Sara Zuppiroli Laboratorio di Python

Page 14: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio

1 Scrivere una funzione che dato un insieme di studenti e voti adessi associati restituisca un dizionario degli studenti e dei voti adessi associati, suddivisi per lettera del cognome. Le chiavi sono igruppi (a-f), (g-o), (p-z); i valori le liste degli studenti e dei voti.

2 Si definisca la funzione di inserimento e cancellazione di un datostudente nel dizionario appena creato.

3 Si definisca la funzione che inserisca a uno studente presentenel dizionario una lista di voti.

Sara Zuppiroli Laboratorio di Python

Page 15: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio 1.1

def dizionario(s):if type(s)==tuple:

d={}k1=('A','F')k2=('G','O')k3=('P','Z')d={k1:[],k2:[], k3:[]}itero= list(d.keys()) # versione 3.xfor i in range(len(s)):

for k in itero:t=str(s[i][0])if t[0] >= k[0] and t[0]<=k[len(k)-1]:

d[k].append(s[i])return (d)

Se stiamo usando la versione 2.x, il codice diventa: itero= d.keys()

Sara Zuppiroli Laboratorio di Python

Page 16: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio 1.2a

def inser_studente(s,d):itero= list(d.keys()) # versione 3.xfor k in itero:

t=str(s[0])if t[0] >= k[0] and t[0]<=k[len(k)-1]:

d[k].append(s)return (d)

Se stiamo usando la versione 2.x, il codice diventa: itero = d .keys()

Sara Zuppiroli Laboratorio di Python

Page 17: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio 1.2b

def canc_studente(s,d):itero= list(d.keys()) # versione 3.xfor k in itero:

t=str(s[0])if t[0] >= k[0] and t[0]<=k[len(k)-1]:

ite=d[k]lung=len(ite)

for l in range(lung):if t == ite[l][0]:

del ite[l]d[k]=itereturn (d)

Sara Zuppiroli Laboratorio di Python

Page 18: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Cerca studente

def cerca_studente_n(s,d):itero= list(d.keys()) # versione 3.xfor k in itero:

if type(s)==list:t=str(s[0])if t[0] >= k[0] and t[0]<=k[len(k)-1]:

ite=d[k]for l in range(len(ite)):

if t == ite[l][0]:return (k,l)

elif type(s)==str:if s[0] >= k[0] and s[0]<=k[len(k)-1]:

ite=d[k]for l in range(len(ite)):

if s == ite[l][0]:return (k,l)

return(None,None)

Sara Zuppiroli Laboratorio di Python

Page 19: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio 1.2b che richiama cerca_studente

def canc_studente_n(s,d):k, l=cerca_studente_n(s,d)if k is not None:

ite=d[k]del ite[l]d[k]=ite

return (d)

Sara Zuppiroli Laboratorio di Python

Page 20: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio 1.3

def insert_voto(s,d,n):k, l=cerca_studente_n(s,d)ite=[]if k is not None:

ite=d[k]if type(n) == list:

for i in n:ite[l][1].append(i)d[k]=ite

return delif type(n)==int:

ite[l][1].append(n)d[k]=itereturn d

return d

Sara Zuppiroli Laboratorio di Python

Page 21: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio 2

Si definisca una funzione che preso un dizionario di studenti e votisuddivisi per lettera, restituisca un dizionario con gli studenti suddivisiper intervalli di media di voto. Nel calcolo della media la lodepermette di arrotondare all’intero successivo, nel caso in cui nellalista dei voti non sia presente una lode l’arrotondamento é per difetto.Esempio:

Studenti=(a-f):[[’Alighieri’,[24,30,26], · · · ],[[’Boccaccio’,[18,22,24]], · · · ], (’g’-’o’):[[Manzoni,[30,29,30]], · · · ],(’p’,’z’)[[’Poe’,[23,30L,26]],· · · ]Studenti_voto_medie=(18, 23): [’Boccaccio’, · · · ],(24,27):[Alighieri, ’Poe’,· · · ], (28-30):[’Manzioni’,· · · ]

Sara Zuppiroli Laboratorio di Python

Page 22: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio 2- calcolo medie

def media_voti_studente(l):if type(l) == list:

s=0ite=lfor i in ite:

s=s+ireturn s/len(ite)

return None

Sara Zuppiroli Laboratorio di Python

Page 23: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizio 2 - funzione dizionario

def dizionario_media(d):if type(d)==dict:

dm={}k1=(18,23)k2=(24,26)k3=(27,30)dm={k1:[],k2:[], k3:[]}itero= list(d.values()) # versione 3.xitero2=list(dm.keys()) # versione 3.xfor k in itero:

if len(k)>0:for i in k:

t=str(i[0])media=media_voti_studente(i[1])if media is not None:

for r in itero2:if media >= r[0] and media<=r[1]:

dm[r].append(t)return (dm)

Sara Zuppiroli Laboratorio di Python

Page 24: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Matrici sparse

Come rappresentare una matrice sparsa? La matrice sparsa é unamatrice che ha quasi tutti i valori pari a zero.

Sara Zuppiroli Laboratorio di Python

Page 25: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Rappresentazione matrice sparsa

1 Matrice = [ [0,0,0,1,0], [0,0,0,0,0], [0,2,0,0,0], [0,0,0,0,0],[0,0,0,3,0] ]

2 Matrice = {(0,3) : 1, (2,1) : 2, (4,3) : 3} → quindi la chiaverisulta essere l’indice del valore diverso da zero e il valore é ilvalore diverso da zero della matrice

Perché scegliere la seconda implementazione?

Sara Zuppiroli Laboratorio di Python

Page 26: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizi

Definiamo le funzioni che implementino le operazioni di:sommamoltiplicazione

indipendentemente dalla rappresentazione della matrice che é statautilizzata.

Sara Zuppiroli Laboratorio di Python

Page 27: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Esercizi

Definire una funzione che preso un dizionario di studenti con ivoti ad essi associati restituisca un dizionario che abbia perchiavi 4 intervalli di medie voti tali per cui la distribuzione deglistudenti in questi 4 intervalli sia costante a meno di unostudente, e per valori i cognomi degli studenti appartenenti aquella media di voto.

Sara Zuppiroli Laboratorio di Python

Page 28: Laboratorio di Python - Plone sitecs.unibo.it/~zuppirol/lez8.pdfLaboratorio di Python Dizionari, Esercizi su dizionari Sara Zuppiroli Università di Bologna 24 aprile e 3 maggio 2013

Correzione eserciziDomande sul Progetto

Dizionari

Cosa abbiamo fatto?

1 Correzione esercizi

2 Domande sul Progetto

3 Dizionari

Sara Zuppiroli Laboratorio di Python