• Non ci sono risultati.

24aprilee3maggio2013 Dizionari,EsercizisudizionariSaraZuppiroli LaboratoriodiPython

N/A
N/A
Protected

Academic year: 2021

Condividi "24aprilee3maggio2013 Dizionari,EsercizisudizionariSaraZuppiroli LaboratoriodiPython"

Copied!
28
0
0

Testo completo

(1)

Laboratorio di Python

Dizionari, Esercizi su dizionari

Sara Zuppiroli

Università di Bologna

24 aprile e 3 maggio 2013

(2)

Sommario

1 Correzione esercizi

2 Domande sul Progetto

3 Dizionari

(3)

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 fa return e #codesto metodo

Restituisce errore perché?

(4)

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 numeri S2=random.choice(Semi)#scelta casuale semi final=str(S1)+ " di " +S2

if 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

(5)

Domande

Quando viene definita una frase viene detto che é delimitata da qualsiasi segno di punteggiatura: quindi tutti i segni li elencati come punteggiatura? anche l’a-capo e la virgola per quanto riguarda i segni di punteggiatura: nel testo ne sono elencati solo alcuni, ma per esempio i segni come > e <, che di solito aprono un 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’alfabeto solamente o anche cifre e punteggiatura?

(6)

Domande

Per quanto riguarda tutti i caratteri speciali come (&, %, Û, ecc..) sono da considerarsi tra segni di punteggiatura o segni

alfabetici?

Quando si legge un file, se in esso vi sono dei tab o altri comandi simili vengono trasformati in

t ecc. a seconda dei casi oppure si deve ripulire il testo da questi in modo che non vi sia un conteggio errato delle lettere?

(7)

Definizione e Inizializzazione

I dizionari sono sequenze mutabile. I dizionari hanno un indice chiamato chiave. La chiave é definibile da un qualunque tipo immutabile.

Per inzializzare un dizionario d si usa il comando:

d = {}

(8)

Definizione e Assegnazione

d = {chiave : val, chiave2 : val, · · · }

chiave puó essere di tipo stringa, intero, tupla, ecc... qualsiasi tipo immutabile

Val puó essere definito qualsiasi tipo anche un dizionario stesso

Ad esempio:

d = {0vocali0: (0a0,0e0,0i0,0o0,0u0),0consonanti0 : (0b0,0c0, ...),0punteggiatura0: (0:0,0;0)}

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

’punteggiatura’

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

(’b’,’c’, ...); (’,’,’;’)

(9)

Operazioni sui dizionari

Modifica : d[’vocali’] = (’a’,’e’,’i’,’o’,’u’, ’A’,’E’, ’I’, ’O’,’U’) → modifica la chiave giá presente con i valori a destra dell’uguale Assegnazione : d[’alfabeto’]=(’a’,’b’, ... )→ associa alla variabile d

una nuova chiave con i valori a destra dell’uguale Cancellazione : del d[’consonanti’] → cancella da d la chiave e i

valori ad essa associati

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

(10)

Metodi dei dizionari versione 2.x

keys : d.keys → ritorna la lista delle sue chiavi

values d.values → ritorna la lista dei valori in un dizionario has_key → d.has_key(’vocali’) prende come argomento una

chiave e ritorna (1) se la chiave é presente nel dizionario 0 altrimenti

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

(11)

Metodi key and values versione 3.x

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

(12)

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', ...), (':',';')])

(13)

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', ...) ]

(14)

Esercizio

1 Scrivere una funzione che dato un insieme di studenti e voti ad essi associati restituisca un dizionario degli studenti e dei voti ad essi associati, suddivisi per lettera del cognome. Le chiavi sono i gruppi (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 dato studente nel dizionario appena creato.

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

(15)

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.x for 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)

(16)

Esercizio 1.2a

def inser_studente(s,d):

itero= list(d.keys()) # versione 3.x for 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()

(17)

Esercizio 1.2b

def canc_studente(s,d):

itero= list(d.keys()) # versione 3.x for 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]=ite return (d)

(18)

Cerca studente

def cerca_studente_n(s,d):

itero= list(d.keys()) # versione 3.x for 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)

(19)

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)

(20)

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 d elif type(n)==int:

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

return d return d

(21)

Esercizio 2

Si definisca una funzione che preso un dizionario di studenti e voti suddivisi per lettera, restituisca un dizionario con gli studenti suddivisi per intervalli di media di voto. Nel calcolo della media la lode

permette di arrotondare all’intero successivo, nel caso in cui nella lista 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’,· · · ]

(22)

Esercizio 2- calcolo medie

def media_voti_studente(l):

if type(l) == list:

s=0 ite=l

for i in ite:

s=s+i

return s/len(ite) return None

(23)

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.x itero2=list(dm.keys()) # versione 3.x for k in itero:

if len(k)>0:

for i in k:

t=str(i[0])

media=media_voti_studente(i[1])

(24)

Matrici sparse

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

(25)

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 chiave risulta essere l’indice del valore diverso da zero e il valore é il valore diverso da zero della matrice

Perché scegliere la seconda implementazione?

(26)

Esercizi

Definiamo le funzioni che implementino le operazioni di:

somma moltiplicazione

indipendentemente dalla rappresentazione della matrice che é stata utilizzata.

(27)

Esercizi

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

(28)

Cosa abbiamo fatto?

1 Correzione esercizi

2 Domande sul Progetto

3 Dizionari

Riferimenti

Documenti correlati

[r]

«secondo la carne», proverebbe che il profeta Natan usava, secondo i tempi, due pesi e due misure. Lo stesso libro biblico non dice che Natan avesse ricevuto da Dio una

QUESTO TI SARÀ MOLTO UTILE, PERCHÈ POTRAI SCOPRIRE DA SOLO IL SIGNIFICATO DELLE PAROLE CHE NON

Nella scheda Generale nella parte inferiore della finestra fare clic sulla casella della proprietà Indicizzato, quindi fare clic su Sì (Duplicati possibili) oppure

[r]

Lista Voti Validi

Completa il disegno del fondale marino disegnando pesci, conchiglie, un ippocampo, una stella marina, un granchio; colora utilizzando i pennarelli a spirito; colora lo sfondo

-il significato, espresso da una definizione; se la parola ha più significati, viene dato per primo quello &#34;proprio&#34;, seguito da quelli