Qui potete trovare tutte le informazioni riguardo il contenuto delle lezioni, ed il relativo materiale. Tenete d'occhio questa pagina. Il codice di alcune funzioni viste durante il corso si trova nel file:
che verrà aggiornato durante il corso. Le basi di dati su cui esercitarvi sono:
Registro automobilistico: una base di dati popolata che viene usata nel manuale SQL del corso.
- (Formato SQLite) può essere aperto direttamente SQLite
- (Comandi SQL) importabile in qualunque gestore di database.
Modelli
i dati diCod_Fabbrica
eNumero_Versioni
erano invertiti. I nuovi file sono corretti.- Chinook: una base di dati popolata con informazioni relative ad un
negozio musicale, e rilasciata da Luis Rocha.
- (Formato SQLite) può essere aperto direttamente SQLite
- (Comandi SQL) importabile in qualunque gestore di database.
Laboratorio 11 - Integrare Python e SQL
Lezione 21 - SQL - Elementi più avanzati
In questa lezione vediamo come eseguire query SQL che calcolano funzioni sulle colonne della tabella: i cosiddetti operatori aggregati (o funzioni di gruppo). Concludiamo poi le lezioni su SQL con una descrizione sommaria di quelle caratteristiche di SQL che non faremo in tempo a vedere.
Sezioni 4.5, 4.6, 4.7 e Capitolo 7 del manuale SQL.
Lezione di recupero 2
La lezione si svolge nell'Aula 15 del CU035. Ovvero nella solita aula dove vengono fatte le lezioni teoriche. L'idea è di rivedere il materiale delle precedenti lezioni e chiarire dubbi.
Orario: 14:30–17:30
Lezione 20 - Query SQL - Combinare più tabelle
Vediamo come costruire query SQL che combinano i dati di
più tabelle. In particolare come utilizzare il prodotto cartesiano
e i vari tipi di operatori JOIN. Contestualmente vedremo l'uso di
foreign key
per impostare vincoli di integrità referenziale.
Capitoli 5 e 6 del manuale SQL.
Laboratorio 10 - Suggerimenti per lo sviluppo Python
Per migliorare ed esercitarsi nella programmazione Python ho preparato delle funzioni per testare i programmi, che sono contenute in infosefa.py. Vediamo queste funzioni per la costruzione di test, e poi discutiamo come completare il codice in minmods.py, utilizzando un ambiente di sviluppo (e.g. Thonny) con il debugger integrato.
Lezione di recupero 1
La lezione si svolge nell'Aula 15 del CU035. Ovvero nella solita aula dove vengono fatte le lezioni teoriche. L'idea è di rivedere il materiale delle precedenti lezioni e chiarire dubbi.
Orario: 13:00–16:00
Lezione 19 - Query SQL su singole tabelle
Prima spieghiamo come è strutturata una tabella e come specificare
vincoli su di essa. Poi vediamo come effettuare query SQL che
riguardino una singola tabella, in particolare le espressioni che
possono essere utilizzate nella clausola where
e l'uso di
order by
.
Sezioni 4.1, 4.2, 4.3, 4.8 del Manuale di SQL.
Laboratorio 9 - SQLite e esercizi Python
Lezione 18 - Algebra relazionale
Concludiamo le cose dette nella lezione precedente. Ovvero i criteri di integrità e di qualità di uno schema relazionale, basati sulle dipendenze funzionali e sulle forme normali. Discutiamo poi l'algebra relazionale, ovvero le operazioni di manipolazioni delle tabelle e di incrocio dei dati.
Capitolo 3 del Manuale SQL.
Lezione 17 - Introduzione alle basi di dati
Introduciamo il concetto di sistema informativo e di base di dati. Facciamo una breve panoramica sui metodi e sulle fasi di progettazione di una base di dati, e sulle problematiche da affrontare. Introduciamo poi il modello relazionale.
Capitoli 1 e 2 del Manuale SQL.
Laboratorio 8 - Elaborazione di stringhe
- programma con i test: test_lab08.py
Più precisamente dovrete:
- salvare le vostre funzioni in un file
lab08.py
- scaricare il file
test_lab08.py
- eseguire, nella stessa cartella che li contiene
$ python3 test_lab08.py
Lezione 16 - Ricerca in documenti di testo
Vediamo come utilizzare le operazioni su stringhe e file per calcolare statistiche su file di testo. In particolare costruiremo una funzione che dati alcuni file, li classifica in base alla frequenza con cui delle chiavi di ricerca occorrono al loro interno.
Capitolo 11 del libro di testo.
I documenti utilizzati per gli esempi a lezione sono copie liberamente utilizzabili di libri archiviati dal progetto Gutemberg.
Lezione 15 - Uso di file e dati
Le informazioni su cui si lavora possono essere salvati su supporti di memorizzazione permanenti. Per fare questo i sistemi operativi forniscono il concetto di file vedremo come leggere e scrivere dati su file.
Capitolo 10 del libro di testo.
Laboratorio 7 - Ripasso ed esercitazione
Esercitazione libera. Sono a disposizione per aiutare e per discutere in dettaglio alcune soluzioni di esercizi, nel caso diversi studenti vogliano farlo.
Lezione 14 - Equazioni di ricorrenza e ordinamenti lineari
Discutiamo più in generale come risolvere equazioni di ricorrenza, e accenniamo al Master Theorem. Poi continuiamo con algoritmi di ordinamento che funzionano in tempo lineare.
(appunti)
Lezione 13 - Mergesort
Oggi vediamo il Mergesort, un algoritmo di ordinamento per ``per confronto'' che raggiunge l'efficienza asintotica ottimale. Prima però discutiamo un po' della struttura dati di pila (o stack).
(appunti)
Laboratorio 6 - Grafici di tempi di esecuzione
Lezione 12 - Bubblesort e ordinamenti per confronti
Laboratorio 5 - Efficienza sperimentale
Discutiamo il problema di testare l'efficienza sperimentale degli algoritmi realizzati. In particolare dovete provare le vostre implementazioni di
- ricerca lineare
- ricerca binaria
- ordinamento di una lista
sottoponendo input sempre più grandi. Potete generare questi input
utilizzando la funzione numeriacaso
dal modulo
infosefa.py, come da slides.
Lezione 11 - Ordinamenti e crescita della complessità
Introduciamo il concetto di complessità di un algoritmo. Per farlo discutiamo due semplici algoritmi di ordinamento, e poi introduciamo la notazione asintotica.
(appunti)
Lezione 10 - Efficienza computazionale
Introduciamo un paio di esempi di ricerca binaria, per illustrare l'enorme differenza di prestazioni tra ricerca lineare e binaria. Questo ci fornisce la scusa per cominciare a discutere di efficienza computazionale.
(appunti)
Laboratorio 4 - Ripasso ed esercitazione
Rivedremo gli esercizi fatti nelle lezioni di laboratorio precedenti. Molti studenti non sono ancora in grado di risolvere gli esercizi o eseguire i programmi di test.
AVVISO: questo lunedì non farò ricevimento. Gli studenti che volevano venire a ricevimento sono pregati di contattarmi per riorganizzare durante questa settimana.
Lezione 9 - Ancora con l'induzione matematica
Continuiamo a trattare l'induzione matematica andando oltre la versione più elementate.
(appunti)
Lezione 8 - Induzione matematica
Abbiamo descritto lo strumento logico detto induzione matematica. Definizioni per induzione e dimostrazioni per induzione.
(appunti)
Laboratorio 3 - Esercizi in Python
- programma con i test: test_lab03.py
Più precisamente dovrete:
- salvare le vostre funzioni in un file
lab03.py
- scaricare il file
test_lab03.py
- eseguire, nella stessa cartella che li contiene
$ python3 test_lab03.py
Esempi di soluzioni del Laboratorio 2: lab02.py
Lezione 7 - Modello a oggetti. Dizionari e Insiemi.
Python è un linguaggio di programmazione in cui ogni entità è un
oggetto, che ha una sua interfaccia e può essere manipolato in
maniera strutturata. Tutti i tipi e le strutture dati che il
linguaggio fornisce possono essere utilizzate in questo modo.
A lezione abbiamo chiarito degli elementi riguardanti la sintassi
per l'uso di oggetti. Inoltre abbiamo introdotto i tipi di dati
dict
e set
.
Capitoli 8 e 9 del libro di testo.
Lezione 6 - Iterazione su sequenze.
La lezione riguarda un tema fondamentale: come ripetere una serie di istruzioni numerose volte, con piccole variazioni, per costruire programmi in grado di effettuare un numero di operazioni potenzialmente illimitato.
Capitolo 7 del libro di testo.
Laboratorio 2 - Esercizi in Python
- programma con i test: test_lab02.py
Più precisamente dovrete:
- salvare le vostre funzioni in un file
lab02.py
- scaricare il file
test_lab02.py
- eseguire, nella stessa cartella che li contiene
$ python3 test_lab02.py
Esempi di soluzioni del Laboratorio 1: lab01.py
Lezione 5 - Sequenze, liste e tuple. Moduli.
A lezione abbiamo visto l'uso di sequenze, ed in particolare di liste e tuple. In questo contesto abbiamo discusso l'immutabilità e la mutabilità.
Attenzione: a lezione ho detto una cosa errata!! Le tuple possono contenere liste e queste liste possono essere modificate.
tupla = (1,2,[3,4]) tupla[0] = "mod" # modifico un elemento della tupla (Errore) tupla[-1][0] = "mod" # modifico un elemento della lista interna print(tupla)
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment (1, 2, ['mod', 4])
La nozione di immutabilità delle tuple è superficiale e si ferma all'identità degli oggetti, non al loro contenuto. Ne discuteremo in laboratorio all'inizio della lezione. Resta il fatto che python non accetta questo tipo di tuple in alcune operazioni.
database = {} database[(1,2,(3,4),5)] = "prima prova" # associamo una stringa a (1,2,(3,4),5) print( database[(1,2) + ((3,4),5)]) # l'indice può essere ricalcolato database[(1,2,[3,4],5)] = "seconda prova" # questa istruzione dà errore
prima prova Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
Lezione 4 - Logica booleana, Costrutto IF
Abbiamo visto i rudimenti della logica booleana e degli operatori
proposizionali not, and, or, xor. Abbiamo visto come utilizzare le
condizioni booleane per adoperare if
, else
, elif
.
Tutto quello che è stato fatto a lezione è sulle slide, anche se non siamo riusciti ad adoperarle.
Laboratorio 1 - Primi esercizi in Python
Dovrete scrivere una serie di funzioni in python, e salvarle sul
file lab01.py
in maniera tale che il lo script test_lab01.py
esegua con successo. Attenzione: la versione precedente
era errata! Scaricate l'ultima versione.
- programma con i test: test_lab01.py (aggiornato)
Più precisamente dovrete:
- salvare le vostre funzioni in un file
lab01.py
- scaricare il file
test_lab01.py
- eseguire, nella stessa cartella che li contiene
$ python3 test_lab01.py
Visto che d'ora in poi useremo molto la riga di comando, è il caso che leggiate un piccolo tutorial su come fare le operazioni di base come muoversi tra cartelle. Django Girls Tutorial (italiano)
Lezione 3 - Elementi del linguaggio Python
Lezione 2 - Dati e programmi
Mi scuso per le difficoltà iniziali della lezione di oggi. Farò di tutto perché non si ripetano.
La lezione si è concentrata prima sulla codifica di dati, ovvero di come vengano codificati numeri interi in binario e esadecimale, e testi in ASCII, ASCII esteso, e UTF-8. Sono stati fatti anche esempi riguardanti la codifica di immagini e segnali.
Poi ci siamo spostati sul tema dei programmi. Sono stati introdotti il linguaggio macchina della CPU, e si è visto come le astrazioni siano strumenti importanti per la progettazione e manutenzione di un programma. Abbiamo introdotto il concetto di linguaggi di alto e basso livello, il concetto di compilatore ed interprete. Sono stati brevemente introdotti Python e SQL.