Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8...

102
Fondamenti di Informatica Massimo Regoli 1 Oggi

Transcript of Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8...

Page 1: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

Fondamenti di Informatica

Massimo Regoli1

Oggi

Page 2: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

Lezione Fondamenti di Informatica

Lezione 6

Page 3: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

OOP

Outline

1 OOPParadigmiOOP

Massimo Regoli 3 / 78

1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica

Page 4: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

OOP

Outline

1 OOPParadigmiOOP

Massimo Regoli 3 / 78

1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica

Page 5: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 6: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 7: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 8: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 9: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

OOP

Outline

1 OOPParadigmiOOP

Massimo Regoli 6 / 78

1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica

Page 10: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 11: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 12: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 13: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

OOP

Esempio

Massimo Regoli 10 / 78

1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica

Page 14: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 15: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

OOP

Classi vs Oggetti

Massimo Regoli 12 / 78

1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica

Page 16: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 17: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 18: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 19: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati
Page 20: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 21: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 22: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 23: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 24: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 25: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 26: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 27: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 28: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 29: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 30: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 31: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 32: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 33: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

Lezione Fondamenti di Informatica

Lezione 7

Page 34: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 35: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 36: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 37: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 38: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 39: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 40: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 41: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 42: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 43: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 44: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

1 2

Petalo vs Sepalo

Massimo Regoli 37 / 78

1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica

Page 45: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 46: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 47: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 48: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

1 2

Flowchart

Massimo Regoli 41 / 78

1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica

Page 49: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 50: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 51: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 52: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 53: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 54: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 55: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 56: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 57: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 58: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 59: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 60: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 61: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 62: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 63: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 64: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 65: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 66: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 67: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 68: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 69: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 70: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 71: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 72: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 73: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 74: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 75: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 76: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 77: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 78: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

1 2

Diagramma a blocchi

Massimo Regoli 57 / 78

1Dipatimento I.C.I.I., Universitá di Roma “Tor Vergata” Fondamenti di Informatica

Page 79: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 80: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 81: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 82: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 83: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 84: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 85: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 86: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 87: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 88: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 89: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 90: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 91: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 92: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 93: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 94: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 95: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 96: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 97: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 98: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 99: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 100: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 101: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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

Page 102: Fondamenti di Informatica · Codifiche e Python 3 Python 3 gestisce bene file in formato utf-8 Python 3 può gestire, grazie all’uso di specifiche librerie anche file compilati

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