fondamenti di informatica · codifiche e python 3 python 3 gestisce bene file in formato utf-8...
TRANSCRIPT
Fondamenti di Informatica
Massimo Regoli1
Oggi
Lezione Fondamenti di Informatica
Lezione 6
OOP
Outline
1 OOPParadigmiOOP
Massimo Regoli 3 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Outline
1 OOPParadigmiOOP
Massimo Regoli 3 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Paradigma di programmazione
Definizione (Wikipedia)
In informatica, un paradigma di programmazione è uno stilefondamentale di programmazione, ovvero un insieme di strumenticoncettuali forniti da un linguaggio di programmazione per lastesura del codice sorgente di un programma, definendo dunque ilmodo in cui il programmatore concepisce e percepisce ilprogramma stesso.Diversi paradigmi si differenziano per i concetti e le astrazioniusate per rappresentare gli elementi di un programma (come adesempio le funzioni, gli oggetti, le variabili, vincoli, ecc.) e per iprocedimenti usati per l’esecuzione delle procedure di elaborazionedei dati (assegnazione, calcolo, iterazione, data flow, ecc).
Massimo Regoli 4 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Tipi di paradidma (principali)
Programmazione procedurale Fortran, Cobol, F#
Programmazione strutturata Pascal, C
Programmazione orientata agli oggetti Smalltalk, Eiffel, C++,Java, Python, Ruby, piattaforma .NET
Massimo Regoli 5 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Tipi di paradidma (principali)
Programmazione procedurale Fortran, Cobol, F#
Programmazione strutturata Pascal, C
Programmazione orientata agli oggetti Smalltalk, Eiffel,
C++, Java, Python, Ruby, piattaforma .NET
Massimo Regoli 5 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Tipi di paradidma (principali)
Programmazione procedurale Fortran, Cobol, F#
Programmazione strutturata Pascal, C
Programmazione orientata agli oggetti Smalltalk, Eiffel, C++,Java, Python, Ruby, piattaforma .NET
Massimo Regoli 5 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Outline
1 OOPParadigmiOOP
Massimo Regoli 6 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Programmazione OOP
La programmazione orientata agli oggetti (OOP) è unparadigma di programmazione basato sul concetto di"oggetto", che può contenere dati, sotto forma di campi(spesso noti come attributi o proprietà) e codice, sottoforma di procedure (spesso noti come metodi).
Una caratteristica degli oggetti sono le procedure di unoggetto che possono accedere e spesso modificare i campi didati dell’oggetto a cui sono associati (gli oggetti hanno spessonozione di this (questo) o self (sé)).
Massimo Regoli 7 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Programmazione OOP
In OOP, i programmi per computer sono progettati creandooggetti che interagiscono tra loro.
I linguaggi OOP sono molti, ma i più popolari sono basati suClassi, il che significa che gli Oggetti sono istanze di classi,che determinano anche la loro tipologia.
Inoltre ogni classe può essere dotata di un costruttore perinizializzare un oggetto della classe
Massimo Regoli 8 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Ricapitolando
Un oggetto è un dato (variabile) complesso appartenente aduna classe (tipo)
Dotato di speciali strutture come:Metodi: procedure e funzioni che fanno agire l’oggettoAttributi: dati che contraddistinguono un oggetto da un altrodella stessa classe (possono a loro volta essere oggetti di altreclassi)
Per accedere agli attributi o ai metodi di un oggetto inPython ed in Java si usa il simbolo ’.’ (punto)
Massimo Regoli 9 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Esempio
Massimo Regoli 10 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Linguaggi OOP
Molti dei linguaggi di programmazione più utilizzati (comeC++, Java, Python, ecc.) sono multi-paradigma e supportanola programmazione orientata agli oggetti in misura maggiore ominore, tipicamente in combinazione con una programmazioneprocedurale imperativa.
I più importanti linguaggi orientati agli oggetti includonoJava, C ++, C#, Python, PHP, JavaScript, Ruby, Perl,Object Pascal, Objective-C, Dart, Swift, Scala, Common Lisp,MATLAB e Smalltalk.
Massimo Regoli 11 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Classi vs Oggetti
Massimo Regoli 12 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Classi vs Oggetti (cit.)
Citazione
What’s the difference between an object and a class?Classes describe objects.They are like blueprints for creating an object.You might have three oranges sitting on the table in front of you.Each orange is a distinct object, but all three have the attributesand behaviors associated with one class: the general class oforanges.
Massimo Regoli 13 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Concetti di base
Ci sono 4 concetti chiave in OOP:InheritanceEncapsulationAbstractionPolymorphism
Massimo Regoli 14 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Concetti di base
Ci sono 4 concetti chiave in OOP:EreditarietàIncapsulamentoAstrazionePolimorfismo
Massimo Regoli 14 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Inheritance
Ereditarietà
Ereditarietà significa che una classe figlia (sottoclasse) eredita dallaclasse madre (superclasse) attributi e comportamenti.Ad esempio nella classe Animal, ci sono metodi e attributi comunia tutti gli animali.Usando il concetto di ereditarietà le classi figlio possono usare gliattributi e i metodi della classe genitore ma possono ancheevolversi descrivendo un diverso comportamento.Ad esempio, il leone ha un’immagine, delle zone di popolamento, illeone eat(), il leone esegue un verso (makeNoise()) ecc.
Massimo Regoli 16 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Encapsulation
Incapsulamento
L’incapsulamento è: nascondere le informazioni (information
hiding).Descrive l’idea di raggruppare dati e metodi che agiscono sui datiall’interno di un’unità (oggetto).Qui l’accesso ai dati deve essere controllato mediante modificatori
(pubblici, privati, protetti ecc.) esponendoli al mondo esternoattraverso getter e setter.
Massimo Regoli 17 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Esempio 1 (Java)
1 package main ;
2 import java .awt . Image ;
34 public class Animal {
5 private Image picture ;
67 public Animal () {
8 this . picture = null ;
9 }
1011 public Image getPicture () {
12 return picture ;
13 }
1415 public void setPicture ( Image p) {
16 this . picture = p;
17 }
18 }
Massimo Regoli 18 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Esempio 1 (python)
✞ ☎1 class Animal:
2 def __init__ (self ):
3 self . _picture = None
45 def set_picture (self , pic ):
6 self . _picture = pic
78 def get_picture (self ):
9 return self ._picture✝ ✆
Massimo Regoli 19 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Abstraction
Astrazione
L’astrazione è nascondere l’implementazione (implementation
hiding). Il suo obiettivo principale è di ridurre la complessità dellosviluppo nascondendo all’utente i dettagli non necessari.Ciò consente all’utente di implementare solo la logica in cimaall’astrazione fornita senza comprendere o anche solo pensare atutta la complessità nascosta.
Massimo Regoli 20 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Polymorphism
Polimorfismo
Il polimorfismo: letteralmente molte forme.Descrive il concetto per cui è possibile accedere ad oggetti didiverso tipo attraverso una stessa interfaccia.Ogni tipo può fornire la propria implementazione indipendente diquesta interfaccia.
Massimo Regoli 21 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Esempio
Nell’esempio che segue la classe Animal ha due metodiastratti che ogni specializzazione (classe derivata) dovràdescrivere separatamente:
theName(): ogni animale ha un suo nome
theNoise(): ogni animale ha un suo verso
ed un metodo comune a tutti gli animalimakeNoise(): tutti gli animali fanno un verso
Massimo Regoli 22 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Esempio: classe astratta
1 package main ;
23 import java .awt . Image ;
45 public abstract class Animal {
6 private Image picture ;
78 abstract String theName ();
9 abstract String theNoise ();
1011 public Animal () {
12 this . picture = null ;
13 }
1415 public void makeNoise () {
16 System. out. println (theName () + " makes : " + theNoise ());
17 }
18 }
Massimo Regoli 23 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Classe derivata
1 package main ;
23 public class Lion extends Animal {
45 @Override
6 String theName () {
7 return " Lion ";
8 }
910 @Override
11 String theNoise () {
12 return " Roaarrrrrrrr ";
13 }
14 }
Massimo Regoli 24 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Classe derivata 2
1 package main ;
23 public class Crocodile extends Animal {
45 @Override
6 String theName () {
7 return " Crocodile ";
8 }
910 @Override
11 String theNoise () {
12 return " Bohhhhh !"; // Trimbula
13 }
14 }
Massimo Regoli 25 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Classe astratta (python)
✞ ☎1 class Animal:
2 def __init__ (self ):
3 pass
45 @abstractmethod
6 def the_name (self ):
7 pass
89 @abstractmethod
10 def the_noise (self ):
11 pass
1213 def make_noise (self ):
14 print ("%s makes %s" % (self .the_name () , self .the_noise ()))✝ ✆
Massimo Regoli 26 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Classi derivate (python)
✞ ☎1 class Lion ( Animal):
2 def the_name (self ):
3 return "Lion "
45 def the_noise (self ):
6 return "Roaaarrrrrrr "
789 class Crocodile (Animal ):
10 def the_name (self ):
11 return "Crocodile "
1213 def the_noise (self ):
14 return "Bohhhhhh !" # Trimbula✝ ✆
Massimo Regoli 27 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
OOP
Approfondimenti
Head First Object-Oriented Analysis and Design: ABrain Friendly Guide to OOA&D, by Brett McLaughlin(Author), Gary Pollice (Author), David West (Author)
ISBN-13: 978-0596008673ISBN-10: 0596008678
Python 3 Object Oriented Programming, by Dusty Phillips(Author)
ISBN-13: 978-1849511261ISBN-10: 1849511268
Massimo Regoli 28 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
Lezione Fondamenti di Informatica
Lezione 7
1 2
Outline
2 File
3 List, Tuple, Set & Dictionary
Massimo Regoli 30 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
File
A differenza di altri linguaggi di programmazione Pythoninclude in forma nativa il tipo “file”
Il tipo file permette una semplice interazione con i file datipresenti sul disco:
Binari: file immagini, musica, . . .Testuali: file .txt, json, xml, csv, . . .Altro
Massimo Regoli 30 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
File – codifica
ASCII: file di testo legacy
UNICODEUTF-[8|16|32]
Con l’introduzione del concetto di encoding, con l’uso dicodifiche utf-* o altro si è complicata le gestione dei filetestuali
Un file scritto con caratteri in vari alfabeti (prendiamo adesempio un file di tweets da tutto il mondo) non può essereformato da soli caratteri ASCII
Da qui nascono problemi di gestione
Massimo Regoli 31 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Codifiche e Python 3
Python 3 gestisce bene file in formato utf-8
Python 3 può gestire, grazie all’uso di specifiche librerie anchefile compilati con altre codifiche
In questo corso vedremo solo casi semplici (binary, ASCII,UTF-8)
Massimo Regoli 32 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
File testuali
la funzione built-in open() viene usata per aprire un file inmodalità:
create
read
write
append
read & write
in formato:binarytext
Massimo Regoli 33 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Tabella riassuntiva
Mode Descrizione
’r’ Default mode: lettura’w’ Questa modalità apre il file per la scrittura. Se il file
non esiste, crea un nuovo file. Se il file esiste, tronca ilfile.
’x’ Crea un nuovo file, ma se il file file esiste l’operazionefallisce
’a’ Apre il file in modalità append, se il file non esiste locrea
’t’ Formato testuale (default)’b’ Formato binario’+’ Apre il file in lettura e scrittura (da aggiungere a r, w,
x, a)
Massimo Regoli 34 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
File: metodi principali
L’oggetto file ha i seguenti metodi:close(): Chiude il file.flush(): Svuota il buffer interno.seek(offset[, whence]): Imposta la corrente posizione delfile. L’argomento whence è facoltativo e per definizione vieneimpostato a 0 (posizionamento assoluto del file); altri valorisono 1 (ricerca relativa alla posizione corrente) e 2 (ricercarelativa alla fine del file).
Massimo Regoli 35 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
File: metodi principali
L’oggetto file ha i seguenti metodi:read([size]): Legge al più una quantità (size) di byte da unfile (di meno se viene letto l’EOF prima di ottenere la quantitàsize di byte). Se l’argomento size è negativo o viene omesso,legge tutti i dati fino a che non viene raggiunto l’EOF.readline([size]): Legge un’intera riga dal file. Sel’argomento size è presente e non negativo, rappresenta ilconteggio massimo dei byte (inclusi i caratteri di fine riga) epuò restituire una riga incompleta.readlines([sizehint]): Legge fino a EOF usandoreadline(), e restituisce una lista contenente le righe lette. Sel’argomento facoltativo sizehint è presente, invece di leggerefino a EOF, legge le righe intere il cui valore approssimativoammonta a sizehint byte.
Massimo Regoli 35 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
File: metodi principali
L’oggetto file ha i seguenti metodi:write(str): Scrive una stringa nel file. Non ci sono valorirestituiti. Fino a che viene bufferizzata, la stringa non puòessere mostrata nel file prima che vengano chiamati i metodiflush() o close().writelines(sequence): Scrive una sequenza di stringhe nelfile. La sequenza può essere ogni oggetto iterabile che producestringhe.
Massimo Regoli 35 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio
Vogliamo leggere un file ASCII formato da un certo numero dirighe contenenti valori separati da una virgola5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
...
I 5 valori sulle righe rappresentano rispettivamente:
Lunghezza sepalo in cmLarghezza sepalo in cmLunghezza petalo in cmLarghezza petalo in cmClasse:
Iris Setosa
Iris Versicolour
Iris Virginica
Massimo Regoli 36 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Petalo vs Sepalo
Massimo Regoli 37 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Lettura file testuali
Per leggere un file testuale formato da righe possiamo usare ilmetodo readline() che appunto legge una riga fino alsimbolo ’\n’ compreso
Il metodo dovrà essere usato fino al raggiungimento della finedel file (aka EOF)
Una volta letta una singola riga dovremmo suddividerla incinque parti per estrarre i singoli valori
Attenzione: l’ultimo campo contiene anche il simbolo ’\n’
Massimo Regoli 38 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio
Vogliamo leggere il valore di larghezza petalo (lp) di tutte leosservazioni di Iris Setosa (IS) e calcolarne la media
In termini matematici:
1
|IS|
∑
x∈IS
x[lp]
Attenzione! la funzione readline() ritorna una stringa, lafunzione split() che abbiamo visto, ci permetterà di separare isingoli campi separati dalla virgola: MA SEMPRE STRINGHESONO!
Massimo Regoli 39 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Descrizione dataset
7. Attribute Information:
1. sepal length in cm
2. sepal width in cm
3. petal length in cm
4. petal width in cm
5. class:
-- Iris-setosa
-- Iris-versicolor
-- Iris-virginica
Massimo Regoli 40 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Flowchart
Massimo Regoli 41 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Step by Step
Apro il file ed inizializzo le variabili✞ ☎
1 iris = open ("../ dati /iris .data ", "r")
2 tot = 0
3 cnt = 0
456789
1011121314
✝ ✆
Massimo Regoli 42 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Step by Step
Leggo la prima riga del file✞ ☎
1234 line = iris . readline ()
56789
1011121314
✝ ✆
Massimo Regoli 42 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Step by Step
Loop fino alla fine del file (riga vuota)✞ ☎
12345 while line != "": # Se l’ultima riga letta è non vuota (while line )
6 line = line .strip ("\n") # rimuovo il carattere \n letto
7 fields = line .split (",") # spacchetto la riga usando ,
8 if fields [4] == "Iris - setosa": # Se il 5.o campo è Iris -setosa
9 tot = tot + float ( fields [3]) # aggiorno la somma
10 cnt = cnt + 1 # ed il numero di elementi
11 line = iris . readline () # leggo la prossima riga e ricomincio
121314
✝ ✆
Massimo Regoli 42 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Step by Step
Chiudo file e finalizzo✞ ☎
123456789
101112 iris .close ()
13 if cnt > 0:
14 print (f"La media è: {tot / cnt }") # Uso f- string✝ ✆
Massimo Regoli 42 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Step by Step
All togheter now!✞ ☎
1 iris = open ("../ dati /iris .data ", "r")
2 tot = 0
3 cnt = 0
4 line = iris . readline ()
5 while line != "": # Se l’ultima riga letta è non vuota (while line )
6 line = line .strip ("\n") # rimuovo il carattere \n letto
7 fields = line .split (",") # spacchetto la riga usando ,
8 if fields [4] == "Iris - setosa": # Se il 5.o campo è Iris -setosa
9 tot = tot + float ( fields [3]) # aggiorno la somma
10 cnt = cnt + 1 # ed il numero di elementi
11 line = iris . readline () # leggo la prossima riga e ricomincio
12 iris .close ()
13 if cnt > 0:
14 print (f"La media è: {tot / cnt }") # Uso f- string✝ ✆
Massimo Regoli 42 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Astrazione
Il programma scritto in Python è perfetto (+ o -)
Ma calcola solo la media della larghezza del sepalo degli iris di
varità setosa
Se volessimo generalizzare il lavoro svolto per non doverscrivere altri programmi per altri calcolo possiamo cercare diastrarre il nostro programma
Uso delle funzioni in python e dei paraemtri di passaggio
Massimo Regoli 43 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Astrazione – 2
Selezione:✞ ☎
1 if fields [4] == "Iris-setosa" :
2✝ ✆
Estrazione:✞ ☎
1 tot = tot + float ( fields [3])
2✝ ✆
Massimo Regoli 44 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Astrazione – 3
Quindi il nostro calcolo specifico si basa su 2 parametri:Quale (varietà)Cosa (misurare)
La nostra funziona allora acetterà quindi 2 parametri chechiameremo:
cls: varietà di iris (o classe)attr: misura (o attributo)
Massimo Regoli 45 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Astrazione – 4
✞ ☎1 def media_iris (cls , attr ):
2 iris = open ("../ dati /iris .data ", "r")
3 tot = 0
4 cnt = 0
5 line = iris .readline ()
6 while line != "": # Se l’ultima riga letta è non vuota
7 line = line .strip ("\n") # rimuovo il carattere \n letto
8 fields = line .split (",") # spacchetto la riga usando ,
9 if fields [4] == cls : # Se il 5.o campo è quello che cerco
10 tot = tot + float ( fields[attr ]) # aggiorno la somma
11 cnt = cnt + 1 # ed il numero di elementi
12 line = iris .readline () # leggo la prossima riga e ricomincio
13 iris .close ()
14 if cnt > 0: # se ho trovato almeno 1 valore
15 return tot / cnt # ritorno la media
16 return None # altrimenti ritorno None✝ ✆
Massimo Regoli 46 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Astrazione – 5
✞ ☎1 m = media_iris ("Iris - setosa ", 0)
2 print (f"La media della lunghezza dei sepali della Iris - setosa è {m}")
3 m = media_iris ("Iris - versicolor ", 0)
4 print (f"La media della lunghezza dei sepali della Iris - versicolor è {m}")
5 m = media_iris ("Iris - setosa ", 1)
6 print (f"La media della larghezza dei sepali della Iris - setosa è {m}")
7 m = media_iris ("Iris - versicolor ", 1)
8 print (f"La media della larghezza dei sepali della Iris - versicolor è {m}")✝ ✆
La media d e l l a l unghe z z a d e i s e p a l i d e l l a I r i s −s e t o s a è 5.005999999999999La media d e l l a l unghe z z a d e i s e p a l i d e l l a I r i s −v e r s i c o l o r è 5.936La media d e l l a l a r g h e z z a d e i s e p a l i d e l l a I r i s −s e t o s a è 3.4180000000000006La media d e l l a l a r g h e z z a d e i s e p a l i d e l l a I r i s −v e r s i c o l o r è 2.7700000000000005
Massimo Regoli 47 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esercizio per casa
Progression of Record times for track races, 1912 - 2008Record in file ascii contenente i seguenti campi:
id (progressivo numerico)
year (anno del record)
time in minuti
distance in chilometri
race in formato stringa
Scaricare i dati:
https://dropbox.com/s/uu5ttqlatzo7ufa/progression.csv
Massimo Regoli 48 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Suggerimenti
Attenzione: la prima riga contiene i nomi dei campi: bisogneràscartarla
I campi che ci interessano sono:year [1]time [2]race [4]
Il separatore questa volta è il simbolo ;
Massimo Regoli 49 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esercizio
Creare una funzione che avendo in input:race (stringa ammissibile)year
fornisca il record nella disciplina valido in quell’anno e ilrelativo anno di conseguimento
Massimo Regoli 50 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Outline
2 File
3 List, Tuple, Set & Dictionary
Massimo Regoli 51 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Liste
Python annovera numerosi tipi di dati composti, usati perraggruppare più valori.
Il più versatile è la lista (List), che può essere definito comeun elenco di valori separati da virgola (elementi) racchiuso tra
parentesi quadre.
Una lista potrebbe contenere elementi di tipi diversi, ma ingenere sono dello stesso tipo.
✞ ☎1 >>> squares = [1, 4, 9, 16, 25]
2 >>> squares
3 [1, 4, 9, 16, 25]
4 >>> squares [0] # indexing returns the item 1
5 >>> squares [-1]
6 25
7 >>> squares [ -3:] # slicing returns a new list
8 [9, 16, 25]
9 >>> squares + [36, 49, 64, 81, 100] # overload +
10 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]✝ ✆
Massimo Regoli 51 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Liste (metodi utili)
append(x)
insert(i, x)
remove(x)
pop([i])
clear()
index(x[, start[, end]])
count(x)
reverse()
Massimo Regoli 52 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio
Supponiamo di dover leggere da tastiera una serie di numeri(diciamo 10)
Ogni numero inserito dovrà essere inserito in una lista
La lista dovrà essere ordinata
La lista dovrà essere stampata in ordine crescente edecrescente
Massimo Regoli 53 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: ingredienti
Di cosa abbiamo bisogno?
Massimo Regoli 54 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: ingredienti
Di cosa abbiamo bisogno?
Leggere dati da tastierainput(): accetta un singolo argomento opzionale: una stringache viene mostrata a video prima di leggere il valore digitato.Una volta che l’utente ha digitato un valore e premuto il tastoInvio, input restituisce il valore come stringa
Massimo Regoli 54 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: ingredienti
Di cosa abbiamo bisogno?
Verificare che il dato inserito sia correttostr.isdecimal(): Restituisce true (vero) se la stringa ècomposta da cifre decimali ("0123456789").Viceversa, restituisce falso.
Massimo Regoli 54 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: ingredienti
Di cosa abbiamo bisogno?
Convertire un oggetto str in un oggetto int
int(): La funzione int prende un valore e lo converte, sepossibile, in intero.Se la conversione non è possibile mostra un messaggio d’errore
Massimo Regoli 54 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: ingredienti
Di cosa abbiamo bisogno?
Leggere dati da tastierainput(): accetta un singolo argomento opzionale: una stringache viene mostrata a video prima di leggere il valore digitato.Una volta che l’utente ha digitato un valore e premuto il tastoInvio, input restituisce il valore come stringa
Verificare che il dato inserito sia correttostr.isdecimal(): Restituisce true (vero) se la stringa ècomposta da cifre decimali ("0123456789").Viceversa, restituisce falso.
Convertire un oggetto str in un oggetto int
int(): La funzione int prende un valore e lo converte, sepossibile, in intero.Se la conversione non è possibile mostra un messaggio d’errore
Massimo Regoli 54 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: primi passi
✞ ☎1 strnum = input ("Dammi un numero : ")
2 if strnum . isnumeric ():
3 num = int ( strnum)
4 ...
5 else : # altrimenti
6 print ("Ho detto : dammi un numero")✝ ✆
Massimo Regoli 55 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: primi passi
✞ ☎1 strnum = input ("Dammi un numero : ") # leggo una stringa
2 if strnum . isnumeric (): # verifico che sia un numero
3 num = int ( strnum) # nel caso lo converto
4 ... # e faccio altre cose
5 else : # altrimenti
6 print ("Ho detto : dammi un numero") # Ops ! Errore✝ ✆
Massimo Regoli 55 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: flusso
Dobbiamo fare questo per 10 volte (ciclo while)
Massimo Regoli 56 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: flusso
Dobbiamo fare questo per 10 volte (ciclo while)
Ogni dato corretto dovrà essere appeso ad una listalist.append(): Appende un elemento ad una lista
Massimo Regoli 56 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: flusso
Dobbiamo fare questo per 10 volte (ciclo while)
Alla fine la lista dovrà essere ordinatalist.sort(): Ordina una lista omogenea nel tipo di daticontenuti in forma crescenteOpzionalmente si può passare il parametro reverse (True |
False) per ottenere un ordinamento descrescente
Massimo Regoli 56 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: flusso
Dobbiamo fare questo per 10 volte (ciclo while)
E stampata
Massimo Regoli 56 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio: flusso
Dobbiamo fare questo per 10 volte (ciclo while)
Ogni dato corretto dovrà essere appeso ad una listalist.append(): Appende un elemento ad una lista
Alla fine la lista dovrà essere ordinatalist.sort(): Ordina una lista omogenea nel tipo di daticontenuti in forma crescenteOpzionalmente si può passare il parametro reverse (True |
False) per ottenere un ordinamento descrescente
E stampata
Massimo Regoli 56 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Diagramma a blocchi
Massimo Regoli 57 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
All togheter now!
✞ ☎1 lst = []
2 i = 1
3 while i <= 10:
4 strnum = input ("Dammi il %d.o numero: " % i)
5 if strnum. isnumeric ():
6 num = int ( strnum)
7 lst .append (num )
8 i = i + 1
9 else : # altrimenti
10 print ("Ho detto : dammi un numero")
1112 lst .sort ()
13 print (lst )
14 lst . reverse ()
15 print (lst )✝ ✆
Massimo Regoli 58 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
All togheter now!
✞ ☎1 lst = [] # dichiaro una lista vuota
2 i = 1
3 while i <= 10: # per dieci volte ...
4 strnum = input ("Dammi il %d.o numero: " % i) # leggo una stringa
5 if strnum. isnumeric (): # verifico che sia un numero
6 num = int ( strnum) # nel caso lo converto
7 lst .append (num ) # e lo appendo alla lista
8 i = i + 1 # incremento il numero di input corretti
9 else : # altrimenti
10 print ("Ho detto : dammi un numero") # Ops ! Errore
1112 lst .sort () # ordino la lista usando il metodo sort
13 print (lst ) # la stampo in ordine crescente
14 lst . reverse () # la inverto
15 print (lst ) # la stampo in ordine decrescente✝ ✆
Massimo Regoli 58 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esercizio
Progression of Record times for track races, 1912 - 2008Record in file ascii contenente i seguenti campi:
id (progressivo numerico)
year (anno del record)
time in minuti
distance in chilometri
race in formato stringa
Scaricare i dati:
https://dropbox.com/s/uu5ttqlatzo7ufa/progression.csv
Massimo Regoli 59 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esercizio
Creare una funzione che avendo in input:race (stringa ammissibile)
fornisca 2 liste dei record presenti nel file
Il primo record conterrà l’anno del record
Il secondo record conterrà il tempo in secondi del record
Massimo Regoli 60 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Tuple
Finora abbiamo visto due tipi composti: le stringhe (sequenzedi caratteri) e le liste (sequenze di elementi di tipo qualsiasi).
Una delle differenze che abbiamo notato è che le gli elementidi una lista possono essere modificati, mentre non possonoessere alterati i caratteri in una stringa:
le stringhe sono infatti immutabili mentre le liste sono mutabili.
Massimo Regoli 61 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Tuple
C’è un altro tipo di dati in Python, simile alla lista eccetto peril fatto che è immutabile: la tupla.
La tupla è una lista di valori separati da virgole:✞ ☎
1 >>> tupla = ’a’, ’b’, ’c’, ’d’, ’e’
2 >>> tupla = (’a’, ’b’, ’c’, ’d’, ’e’) # non necessario ma più leggibile✝ ✆
Massimo Regoli 62 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Tuple
A differenza delle liste se cerchiamo di modificare gli elementidi una tupla otteniamo un messaggio d’errore:
✞ ☎1 >>> tupla [0] = ’A’
2 # TypeError : object does ’nt support item assignment✝ ✆
Ma possiamo accedere ad ogni singolo elemento:✞ ☎
1 >>> print (tupla [0]) # singolo
2 >>> print (tupla [1:3]) # slice✝ ✆
Massimo Regoli 63 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Tuple vs List
Le tuple hanno dimensioni fisse, mentre gli elenchi sonodinamici.
In altre parole, una tupla è immutabile mentre una lista èmutabile.
Non si può aggiungere elementi a una tupla. Le tuple nonhanno metodo di aggiunta o estensione.
Non si può rimuovere elementi da una tupla. Le tuple nonhanno alcun metodo di rimozione o pop.
Si può usare l’operatore in per verificare se esiste un elementonella tupla
Massimo Regoli 64 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Tuple vs List
Le tuple sono più veloci delle liste.
Le tuple rendono il codice più sicuro.
In alcuni casi le tuple rendono il codice più leggibile.
Alcune librerie implementano funzione che necessitano di datiin formato tupla
Massimo Regoli 65 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio
✞ ☎1 my_tuple = 3, 4.6, "dog "
2 print ( my_tuple )
345 a, b, c = my_tuple
67 print (a)
8 print (b)
9 print (c)✝ ✆
Massimo Regoli 66 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempio
✞ ☎1 my_tuple = 3, 4.6, "dog "
2 print ( my_tuple ) # stampa (3, 4.6, ’dog ’)
345 a, b, c = my_tuple # possibile anche spacchettare
67 print (a) # 3
8 print (b) # 4.6
9 print (c) # dog✝ ✆
Massimo Regoli 66 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempi
✞ ☎12 nani = (’Dotto ’, ’Brontolo ’, ’Pisolo ’,
3 ’Mammolo ’, ’Gongolo ’, ’Eolo ’, ’Cucciolo ’)
45 dwarfs = (’Doc ’, ’Grumpy ’, ’Sleepy ’,
6 ’Bashful ’, ’Happy ’, ’Sneezy ’, ’Dopey ’)
78 for x in zip (nani , dwarfs):
9 print (’%s in inglese si chiama %s’ % x)✝ ✆
Massimo Regoli 67 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempi
✞ ☎1 # nomi dei sette nani in italiano
2 nani = (’Dotto ’, ’Brontolo ’, ’Pisolo ’,
3 ’Mammolo ’, ’Gongolo ’, ’Eolo ’, ’Cucciolo ’)
4 # nomi dei sette nani in inglese
5 dwarfs = (’Doc ’, ’Grumpy ’, ’Sleepy ’,
6 ’Bashful ’, ’Happy ’, ’Sneezy ’, ’Dopey ’)
7 # accoppio ogni nome italiano con quello inglese
8 for x in zip (nani , dwarfs):
9 print (’%s in inglese si chiama %s’ % x)✝ ✆
Massimo Regoli 67 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
zip
zip(iter)Crea un iteratore che aggrega elementi da ciascuno degliiterabili.Restituisce un iteratore di tuple, in cui la i-esima tuplacontiene l’i-esimo elemento di ciascuna delle sequenze diargomenti o iterabili passati.L’iteratore si arresta quando viene esaurito l’input più breve.Con un singolo argomento iterabile, restituisce un iteratorecomposta da tuple di un nelemento.Senza argomenti, restituisce un iteratore vuoto.
Massimo Regoli 68 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Esempi
✞ ☎1 nani = (’Dotto ’, ’Brontolo ’, ’Pisolo ’,
2 ’Mammolo ’, ’Gongolo ’, ’Eolo ’, ’Cucciolo ’,
3 ’Intrufolo ’) # Questo non verrà stampato
4 dwarfs = (’Doc ’, ’Grumpy ’, ’Sleepy ’,
5 ’Bashful ’, ’Happy ’, ’Sneezy ’, ’Dopey ’)
6 naines = (’Prof ’, ’Grincheux ’, ’Dormeur ’,
7 ’Timide ’, ’Joyeux ’, ’Atchoum ’, ’Simplet ’)
8 for x in zip (nani , dwarfs , naines):
9 print (’%s in inglese si chiama %s mentre in francese %s’ % x)✝ ✆
Massimo Regoli 69 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Set
Python include anche un tipo di dati per i set o insiemi.
Un set è una raccolta non ordinata di elementi univoci.
Gli usi di base includono test di appartenenza ed eliminazionedi voci duplicate.
Gli oggetti set supportano anche operazioni matematichecome unione, intersezione, differenza e differenza simmetrica.
Le parentesi graffe o la funzione set() possono essereutilizzate per creare set.
NB: per creare un set vuoto devi usare set() e non :quest’ultimo crea un dizionario vuoto, una struttura di datiche discuteremo presto.
Massimo Regoli 70 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Set: metodi principali – 1
Operazione Risultato
len(s) cardinalità dell’insieme sx in s verifica x come membro di s
x not in s verifica che x non sia un membro di ss.issubset(t) verifica se ogni elemento in s è in t
s.issuperset(t) verifica se ogni elemento in t è in ss.union(t) nuovo insieme con elementi sia di s che di t
s.intersection(t) nuovo insieme con elementi comuni tra s e ts.difference(t) nuovo insieme con elementi in s ma non in t
s.symmetric_difference(t) nuovo insieme con gli elementi di s o t ma nonentrambi
s.copy() nuovo insieme, una copia superficiale di s
Massimo Regoli 71 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Set: metodi principali – 2
Operazione Risultato
s.update(t) restituisce l’insieme s con elementi aggiunti da ts.intersection_update(t) restituisce l’insieme s dei soli valori comuni riscontrati
anche in ts.difference_update(t) restituisce l’insieme s dopo la rimozione degli elementi
comuni riscontrati in ts.symmetric_difference_update(t) restituisce l’insieme s con elementi da s o t ma non da
entrambis.add(x) aggiunge l’elemento x all’insieme s
s.remove(x) rimuove x dall’insieme s; solleva l’eccezione KeyErrorse non presente
s.discard(x) rimuove x dall’insieme s se presentes.pop() rimuove e restituisce un elemento arbitrario da s;
solleva l’eccezione KeyError se non presentes.clear() rimuove tutti gli elementi dall’insieme s
Massimo Regoli 72 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Dizionari
Il tipo dictionary (dizionario) è una potente struttura di datiche ha una "chiave" e un valore’.
Ogni chiave è unica nel dizionario e ha un valore associato.
Il valore associato, tuttavia, non deve essere unico.
L’esempio più chiaro è proprio quello del dizionarioLa chiave è la parolaIl valore è la sua descrizione
Massimo Regoli 73 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Dizionari – Esempio
✞ ☎1 mydict = {"cane ": "Nome com . di mammiferi della famiglia dei Canidi " ,
2 "gatto ": "Mammifero dei Felidi ( Felis cattus ), "
3 "domesticato da lungo tempo per compagnia "
4 "e per la cattura dei topi ;"
5 }✝ ✆
Massimo Regoli 74 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Dizionari – Sintassi
I dizionari vengono definiti elencando tra parentesi graffe ({})una serie di elementi separati da virgole (,),
Ogni elemento è formato da una chiave e un valore separatidai due punti (:).
È possibile creare un dizionario vuoto usando le parentesigraffe senza nessun elemento all’interno.
Massimo Regoli 75 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
Dizionari – Sintassi
In questo esempio possiamo vedere che d è un dizionario checontiene 3 elementi formati da una chiave e un valore.
’a’, ’b’ e ’c’ sono le chiavi,
mentre 1, 2 e 3 sono i valori.
Possiamo anche notare come l’ordine degli elementi siaarbitrario, dato che i dizionari non sono ordinati.
>>> d = {’a’: 1, ’b’: 2, ’c’: 3} # nuovo dizionario di 3 elementi
>>> d
{’c ’: 3, ’a’: 1, ’b’: 2}
Massimo Regoli 76 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
dict vs json
Abbiamo già incontrato il formato JSON molto comodonell’interscambio di informazioni tra sistemi eterogenei (client/ server)
La somiglianza tra i due formati suggerisce una interazioneimportante
Esite una libreria di sistema (i.e. installata con l’installazionedi python) che si chiama appunto json che crea un pontebidirezionale tra i due tipi:
json to dict (tipo)dict to json (stringa)
Massimo Regoli 77 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica
1 2
dict vs json✞ ☎
1 import json # importo la libreria
23 # creo una stringa in formato json
4 jsonstring = """
5 {
6 " studenti ":[
7 {
8 "nome ":" matteo ",
9 " cognome ":" mattei ",
10 "eta ":30
11 },
12 {
13 "nome ":" susanna ",
14 " cognome ":" suanni ",
15 "eta ":25
16 }
17 ]
18 }
19 """
20 # la trasformo in formato dict tramite il
21 # metodo loads () della libreria json
22 my_dict = json .loads ( jsonstring )
23 # Stampo il primo record della struttura studenti
24 print ( my_dict [" studenti "][0])
25 # Stampo il nome del secondo record
26 print ( my_dict [" studenti "][1][ "nome "])✝ ✆
Massimo Regoli 78 / 78
1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica