Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
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
Correzione eserciziDomande sul Progetto
Dizionari
Sommario
1 Correzione esercizi
2 Domande sul Progetto
3 Dizionari
Sara Zuppiroli Laboratorio di Python
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Correzione eserciziDomande sul Progetto
Dizionari
Cosa abbiamo fatto?
1 Correzione esercizi
2 Domande sul Progetto
3 Dizionari
Sara Zuppiroli Laboratorio di Python