Il 0% ha trovato utile questo documento (0 voti)
16 visualizzazioni39 pagine

Slides 10

Caricato da

nogik21947
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
16 visualizzazioni39 pagine

Slides 10

Caricato da

nogik21947
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 39

Fondamenti di

Informatica
Introduzione ai concetti fondamentali

Copyright © 2021 Vincenzo Grassi ([email protected]) – Università degli studi di Roma “Tor Vergata”
Except where otherwise noted, this work is licensed under
http://creativecommons.org/licenses/by-nc-sa/4.0/
Domini di dati
• Obiettivi di apprendimento
• generali
• meccanismi di estensione nei linguaggi di programmazione
• rappresentazione di dati strutturati
• uso di librerie di programmi (moduli) predefinite
• casi di studio
• testo con stile
• generazione automatica di testo

• Letture consigliate
• (da: Horstmann, Necaise – Concetti di informatica e
fondamenti di Python)
• cap. 6: par. da 6.1 a 6.6
Copyright © 2021 Vincenzo Grassi
([email protected]) – Università degli studi di
Roma “Tor Vergata” 2
Rappresentazione di dati strutturati
• Obiettivo:
• rappresentare domini (insiemi di valori) …
• … dove ogni elemento dell’insieme è una aggregazione di
vari valori
• eventualmente di tipo diverso
• Stringhe + informazioni di font e stile sono un esempio
• Un altro esempio è la vostra scheda anagrafica :
• aggregazione di vari dati (numerico, carattere, stringa, …)
• nome
• data di nascita
• sesso
• indirizzo
• …
Copyright © 2021 Vincenzo Grassi
([email protected]) – Università degli studi di
Roma “Tor Vergata” 3
Meccanismi Python
• Python offre i seguenti meccanismi :
• List
• Tuple
• Dictionary

• Elementi distintivi
• tipo di aggregato: disomogeneo (in generale)
• list, tuple, dictionary
• modalità di accesso a singoli elementi:
• per indice (posizione): list, tuple
• per chiave: dictionary
• mutabilità:
• mutable: list, dictionary
• immutable: tuple
Copyright © 2021 Vincenzo Grassi
([email protected]) – Università degli studi di
Roma “Tor Vergata” 4
List: meccanismo Python per
rappresentare dati strutturati
• Sintassi : [elem_0, elem_1, …, elem_n]
• Semantica
• elem_i può appartenere a un qualunque tipo di dato
Python
• string, numero, …
• può anche essere un oggetto di tipo list (lista annidata)
• elementi diversi possono essere di tipo diverso
• per convenzione, gli elementi sono numerati a partire da 0
• da sx verso dx
• ogni oggetto di tipo list ha associato con esso un insieme di
operatori su lista
• vedi prossime diapositive …
• una lista è un oggetto mutable
• può essere modificato sul posto

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 5
Tuple: meccanismo Python per
rappresentare dati strutturati
• Sintassi: (elem_0, elem_1, …, elem_n)
• Semantica:
• elem_i può appartenere a un qualunque tipo di dato
Python
• string, numero, …
• elementi diversi possono essere di tipo diverso
• per convenzione, gli elementi sono numerati a partire da
0
• da sx verso dx
• una tupla è un oggetto immutable
• non può essere modificato !
Copyright © 2021 Vincenzo Grassi
([email protected]) – Università degli studi di
Roma “Tor Vergata” 6
Operatori comuni ereditati

sequence (in Python)

string list tuple

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 7
Operatori comuni ai tipi list e tuple (e string)

• Proprietà/operazioni comuni a tutti gli oggetti del


tipo di dato sequence
• rappresentazione: collezione posizionalmente ordinata
di “oggetti”
• da sinistra a destra: 1° elem. (posizione 0), 2° elem.
(posizione 1), …
• operazioni
• indexing / slicing (tramite operatore [ ] )
• membership
• concatenation
• replication
• length, max/min

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 8
Operazioni - 1
• indexing
• [ ] : sequence × N → T
• mySeq[j] restituisce l’elemento di mySeq in posizione j
• slicing
• [ ] : sequence × N × N → sequence
• mySeq[m:n] restituisce la sottosequenza di mySeq compresa tra
gli indici m e n (incluso m, escluso n)
• vari casi particolari …

• membership
• in : T × sequence → boolean
• elem in mySeq restituisce True se mySeq contiene elem, False
altrimenti

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 9
Operazioni - 2
• concatenation
• + : sequence × sequence → sequence
• mySeq_1 + mySeq_2 restituisce la sequenza formata dalla
concatenazione di mySeq_1 e mySeq_2

• replication
• * : N × sequence → sequence
• oppure * : sequence × N → sequence
• n*mySeq oppure mySeq*n restituisce la sequenza fomata dalla
concatenazione di n copie di mySeq

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 10
Operazioni - 3
• length
• len : sequence → N
• len(mySeq) restituisce la lunghezza (num. di elementi) di mySeq
• max/min
• max : sequence → T
• min : sequence → T
• max(mySeq) e min(mySeq) restituiscono; rispettivamente, il
massimo e minimo valore in mySeq

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 11
List – Esempi - 1
>>> myList = ["This", "is", 12]
>>> print myList
['This', 'is', 12]
>>> print myList[0]
This
>>> for i in range(0, len(myList)):
... print myList[i]
...
This
is
12
>>> print myList + ["Really!"]
['This', 'is', 12, 'Really!']
>>> myList[0] = 4
>>> print myList[0]
4
>>> print myList + "Really!"
The error value is: can only concatenate list (not "str") to list
Inappropriate argument type.

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 12
List - Esempi - 2
>>> myList = ["This", "is", ["a", "nested", ["list", "of"], 10], 12]
>>> myList[1]
"is"
>>> myList[2]
["a", "nested", ["list", "of"], 10]
>>> myList[2][0]
"a"
>>> myList[2][2]
["list","of"]
>>> myList[2][2][1]
"of"
>>> myList[3]
12
>>> myList+ ["Really!"]
["This", "is", ["a", "nested", ["list", "of"], 10], 12, 'Really!']
>>> myList[2] = 4
>>> myList
["This", "is", 4, 12]

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 13
Liste nidificate
• In generale:
[i]

[i][j][k]
[..., …, […, …, […, …, …] … ] … ]

[i][j]

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 14
Esempi

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 15
Tuple - Esempi
>>> myTuple = ("This", "is", "another", 12)
>>> print myTuple
('This', 'is', 'another', 12)
>>> print myTuple[0]
This
>>> for i in range(0, len(myTuple[0:2])) :
... print myTuple[i]
...
This
is
>>> myTuple + (5)
The error was:can only concatenate tuple (not "int") to tuple …
>>> myTuple + (5,)
('This', 'is', 'another', 12, 5)
>>> myTuple[0]
This
>>> myTuple[0] = 4
The error was:can't assign to immutable object... …

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 16
List – Operatori Specifici
• Metodi, da usare con la notazione punto (dot
notation)
• list.method()
• modificano la lista a cui sono applicati !!
• nelle definizioni, T denota un qualsiasi tipo di dato Python
(incluso list)
• NON sono applicabili a oggetti di tipo tuple

• append: list × T → none


• myList.append(something) inserisce something di tipo T
alla fine di myList
• come singolo elemento

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 17
List – Operatori specifici - 2
• extend: list × sequence → none
• myList.extend(mySequence) aggiunge gli elementi
costitutivi di mySequence alla fine di myList
• come elementi distinti di mySequence
• l’elemento aggiunto deve essere una sequence
• append aggiunge un elemento a una lista, extend aggiunge n
elementi a una lista
• n = lunghezza di sequence

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 18
List – Operatori specifici - 3
• insert: list × N × T → none
• myList.insert(i, something) inserisce something in myList, nella
posizione di indice i.
• il vecchio elemento in posizione i viene spostato in posizione i+1 (e così via
…)
• se i≥len(myList), insert() inserisce something come ultimo elemento
• remove : list × T → none
• myList.remove(something) rimuove something da myList, se
presente.
• Se something è presente più volte, remove() rimuove il primo (a partire
dalla posizione di indice 0)
• errore se something non è presente
• pop: list → T
• myList.pop() rimuove l’ultimo elemento di myList, e restituisce il
valore rimosso
• errore se la lista è vuota

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 19
List – Operatori specifici - 4
• pop: list × N → T
• myList.pop(i) rimuove da myList l’elemento in posizione
i, e restituisce il valore rimosso
• se |i| ≥ len(myList), si verifica un errore
• sort: list → none
• myList.sort() modifica myList disponendo gli elementi in
ordine (p.es., alfabetico, se applicabile)
• reverse: list → none
• myList.reverse() inverte la posizione degli elementi in
myList
• count: list × T → N
• myList.count(something) conta quante volte something
è presente in myList.

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 20
List - Esempi
>>> myList = ["This", "is", "a", 12]
>>> myList.append(10)
>>> myList
['This', 'is', 'a', 12, 10]
>>> myList.extend(15)
The error was:rhs of setslice must be a sequence … …
>>> myList.extend([15])
>>> myList
['This', 'is', 'a', 12, 10, 15]
>>> myList.append([20])
>>> myList
['This', 'is', 'a', 12, 10, 15, [20]]
>>> myList.append("abcd")
>>> myList
['This', 'is', 'a', 12, 10, 15, [20], 'abcd']
>>> myList.extend("efg")
>>> myList
['This', 'is', 'a', 12, 10, 15, [20], 'abcd', 'e', 'f', 'g']

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 21
ATTENZIONE!!!!
• Attenzione ai metodi che restituiscono none !!!
• lavorano per side effect (la lista viene modificata “sul
posto”)
• se si assegna un tale metodo del tipo list a una variabile,
si ottiene un oggetto che vale None
evitate di confondere con il modo di lavorare delle
stringhe !!

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 22
Esempi
• sort
• reverse
• insert

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 23
Esercizi
• Ipotesi: immaginiamo di non disporre di alcuni
metodi del tipo di dato list
• reverse(),
• count()
• Scrivere funzioni Python che realizzano lo
stesso comportamento di
• reverse(),
• count()

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 24
Esercizio
• Scrivere tre diverse versioni di una funzione che :
• (versione 1) date due stringhe, restituisce quella di
lunghezza massima
oppure
• (versione 2) date tre stringhe, restituisce quella di
lunghezza massima
oppure
• (versione 3) date n stringhe, con n qualsiasi, restituisce
quella di lunghezza massima
• senza mai usare la funzione max()
• in tutti i casi, se esiste più di una stringa di lunghezza massima,
va bene restituirne una qualsiasi
Copyright © 2021 Vincenzo Grassi
([email protected]) – Università degli studi di
Roma “Tor Vergata” 25
Dizionari
• sintassi:
{key:value,key:value,…,key:value}
• semantica
• key può appartenere a un qualunque tipo di dato immutable
• tipicamente: string, numero
• key di coppie diverse possono essere di tipo diverso
• value può appartenere a un qualunque tipo di dato Python
• value di coppie diverse possono essere di tipo diverso
• la posizione delle coppie nell’elenco racchiuso tra {} NON
determina un ordine tra le coppie
• ogni oggetto di tipo dictionary ha associato con esso un
insieme di operatori su dictionary
• vedi prossime diapositive …
• un dictionary è un oggetto mutable
• può essere modificato sul posto
Copyright © 2021 Vincenzo Grassi ([email protected]) – Università
degli studi di Roma “Tor Vergata” 26
Dizionari: esempio
• Creazione di un dizionario
>>> myDict = {'bill':100, 'fred':50, 'sam':10}
>>> myDict
{'sam': 10, 'bill': 100, 'fred': 50} # note the
different order with respect to the definition

• Un dizionario non è una sequenza ma un insieme di


coppie chiave/valore
• La chiave è univoca nell’insieme

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 27
Accesso
• Per accedere ad un dizionario si usa la key (chiave)
• Quindi non un intero posizionale come nelle liste e nelle
tuple
• Key è un indice simbolico più che posizionale
>>> myDict = {'bill':100, 'fred':50, 'sam':10}
>>> myDict ['bill']
100
>>> myDict['fred'] = 75
>>> myDict['george'] = 100 # note that 'george' is a new key
>>> myDict
{'bill':100, 'fred':75, 'george':100, 'sam':10} # note again
the different order

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 28
Operatori - 1
• Metodi, da usare con la notazione punto (dot
notation)
• dictionary.method()
• keys: dictionary → list
• myDictionary.keys() restituisce una lista
contenente tutte le key in myDictionary
• values: dictionary → list
• myDictionary.values() restituisce una lista
contenente tutte i value in myDictionary
• items: dictionary → list
• myDictionary.items() restituisce una lista
contenente tutte le coppie (rappresentate come tuple)
key:value in myDictionary

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 29
Operatori - 2
• get: dictionary × key → T  {none}
• get: dictionary × key × default → T 
{default}
• myDictionary.get(k) restituisce il valore
associato alla key k in myDictionary, se k esiste in
myDictionary, altrimenti restituisce None
• myDictionary.get(k, d) restituisce il valore
associato alla key k in myDictionary, se k esiste in
myDictionary, altrimenti restituisce il valore di default d

Copyright © 2021 Vincenzo Grassi ([email protected]) – Università


degli studi di Roma “Tor Vergata” 30
Operatori - 3
• pop: dictionary × key → T  {error}
• pop: dictionary × key × default → T 
{default}
• myDictionary.pop(k) restituisce il valore v
associato alla key k in myDictionary e rimuove la coppia
k:v da myDictionary, se k esiste in myDictionary;
altrimenti restituisce errore
• myDictionary.pop(k,d) restituisce il valore v
associato alla key k in myDictionary e rimuove la coppia
k:v da myDictionary, se k esiste in myDictionary;
altrimenti restituisce il valore di default d

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 31
Operatori - 4
• update: dictionary × dictionary → none
• myDictionary.update(otherDict) modifica
myDictionary, aggiungendo le coppie presenti in
otherDict
• se sono presenti coppie con stessa key, viene tenuto il
valore associato a key in otherDict
• len: dictionary → N
• numero di elementi

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 32
Esempio
>>> myDict = {'bill':100, 'fred':50, 'sam':10}
>>> myDict.items()
[('sam', 10), ('bill', 100), ('fred', 50)]
>>> myDict ['fred']
50
>>> myDict['joe']
The error was:joe. Mapping key not found. …
>>> myDict.get('fred')
50
>>> myDict.get('joe')
>>> # the returned value is none
>>> myDict.get('joe', 555)
555
Copyright © 2021 Vincenzo Grassi
([email protected]) – Università degli studi di
Roma “Tor Vergata” 33
Esempio - 2
>>> myDict = {'bill':100, 'fred':50, 'sam':10}
>>> myDict.pop('joe')
The error was: dictionary is empty. Mapping key not found.

>>> myDict.pop('joe', 444)
444
>>> myDict.pop('fred',333)
50
>>> myDict
{'sam': 10, 'bill': 100}

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 34
Esempio
persona1 = {"nome": "Massimo",
"cognome": "Regoli",
"nato a": "Roma",
"email": "[email protected]"}
persona2 = {"nome": "Mario",
"cognome": "Rossi",
"nato a": "Firenze",
"email": "[email protected]"}
# Prima forma
for key in persona1.keys():
value = persona1[key]
print key, value

# Seconda forma
for (key, value) in persona2.items():
print key, value

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 35
Esempio
• Items restituisce una lista di tuple
• Ogni elemento della lista è una tupla
• Il primo elemento della tupla è la chiave
• Il secondo elemento della tupla è il valore
>>> print persona1.items()
[('cognome', 'Regoli'), ('nome', 'Massimo'), ('nato a',
'Roma'), ('email', '[email protected]')]
>>>

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 36
Esempio
• Lista di dizionari
• È una lista per cui ciascun elemento è un dizionario
• Tipicamente elementi omogenei (ogni dizionario è
simile agli altri se non identico in termini di chiavi)

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 37
Esempio
persone = [
{"nome": "Massimo",
"cognome": "Regoli",
"nato a": "Roma",
"email": "[email protected]"},

{"nome": "Mario",
"cognome": "Rossi",
"nato a": "Firenze",
"email": "[email protected]"},

{"nome": "Giuseppe",
"cognome": "Bianchi",
"nato a": "Venezia",
"email": "[email protected]"},
...
]
Copyright © 2021 Vincenzo Grassi
([email protected]) – Università degli studi di
Roma “Tor Vergata” 38
Esercizio
• Avendo in input una lista di dizionari di persone
persons e una stringa city costruire una
funzione che elenchi il nome e l’email di tutte le
persone presenti nella lista nati a city

Copyright © 2021 Vincenzo Grassi


([email protected]) – Università degli studi di
Roma “Tor Vergata” 39

Potrebbero piacerti anche