Laboratorio di Python

Похожие документы
Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

laboratorio di python

Liste, dizionari e tuple

Laboratorio di Python (con Linux)

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Programmazione in Python per la bioinformatica

Laboratorio di Python

Laboratorio di Python

Programmi Python: esempi (in Python 3) Prof.ssa Valeria Vittorini Prof. Roberto Canonico Corso di Programmazione I a.a

Informatica 1. Prova di recupero 21 Settembre 2001

Menù. Esercizio sulle liste. Esercizio sulle tuple. Esercizi sui dizionari. Esercizi su classi e dizionari. Progetti

Elementi di Base. Introduzione a Python.

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Esercitazione 3. Espressioni booleane I comandi if-else e while

Funzioni e moduli. Andrea Passerini Informatica. funzioni e moduli

Usare Python in Linux

Laboratorio di Informatica

Rappresentazione binaria

Corso di Linguaggi di Programmazione

Esercizi su Scratch. Esegui la Somma e il Prodotto dei numeri inseriti in Input fino a che non inserisco la vocale e.

Laboratorio di Python

Pensiero computazionale. Lezione 4 Liste

Laboratorio di Python (con Linux)

Introduzione a Python e Gurobi

Dati aggregati. Violetta Lonati

Laboratorio di programmazione

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Algoritmi e Strutture Dati

Транскрипт:

, Esercizi su dizionari Università di Bologna 24 aprile e 3 maggio 2013

Sommario 1 2 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é?

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 Cos é sbagliato? Che tipo di errore é questo?

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?

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?

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 = {}

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 = { 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,...); (,, ; )

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

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.

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

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

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

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.

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) Se stiamo usando la versione 2.x, il codice diventa: itero= d.keys()

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()

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)

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)

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)

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

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, ]

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

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]) if media is not None: for r in itero2: if media >= r[0] and media<=r[1]: dm[r].append(t) return (dm)

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

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?

Esercizi Definiamo le funzioni che implementino le operazioni di: somma moltiplicazione indipendentemente dalla rappresentazione della matrice che é stata utilizzata.

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.

Cosa abbiamo fatto? 1 2 3