AN INTRODUCTION TO PROGRAMMING (PYTHON)
Obiettivi formativi
Scopo del corso è quello di introdurre il concetto di problema computazionale e di risoluzione automatica attraverso la progettazione, l’analisi e l’implementazione di soluzioni algoritmiche computazionalmente efficienti in un linguaggio di programmazione ad alto livello. Alla fine del corso lo studente sarà in grado di trovare soluzioni a semplici problemi computazionali sotto forma di programmi e sarà in grado di valutarne l'efficienza. A tale scopo verranno introdotti i concetti alla base di un qualsiasi linguaggio di programmazione ad alto livello: tipi di dato; strutture di controllo ed istruzioni condizionali; gestione dei file; eccezioni e gestione della memoria.
Saranno dedicate lezioni alla metodologia di programmazione orientata agli oggetti; alle librerie utili per applicazioni orientate a data-science; alla manipolazione di big-data.
Risultati di apprendimento attesi
Conoscenza e capacità di comprensione: lo studente acquisirà i fondamenti del metodo computazionale; conoscerà gli algoritmi di base, le strutture dati e i metodi per valutare l’efficienza degli algoritmi; imparerà i principi dei linguaggi di programmazione con particolare riferimento a Python.
Capacità di applicare conoscenza e comprensione: lo studente acquisirà l’abilità di analizzare semplici problemi computazionali; sarà in grado di descrivere i problemi usando un formalismo adeguato; sarà in grado di trovare soluzioni algoritmiche efficienti e codificarle utilizzando il linguaggio Python.
Autonomia di giudizio: lo studente acquisirà l’abilità di risolvere nuovi problemi computazionali trasferendo nel nuovo dominio le conoscenze tecniche acquisite.
Abilità comunicative: lo studente sarà in grado di interagire riguardo un problema computazionale con persone non esperte.
Capacità di apprendimento: lo studente sarà pronto a continuare la sua formazione per essere aggiornato sugli sviluppi tecnologici.
Contenuti Del Corso
Risoluzione automatica dei problemi; algoritmi e programmi; modelli di calcolo; linguaggi di programmazione; tipi di linguaggi di programmazione; linguaggi imperativi; struttura di un programma; tipi di dati semplici e strutturati; variabili; strutture di controllo; funzioni; ricorsione; operazioni di input/output; strutture di dati elementari; programmazione ad oggetti, utilizzo di librerie.
Testi Di Riferimento
Allen B. Downey (2016). Think Python: How to Think Like a Computer Scientist 2nd Edition. O'Reilly Media. Link.
Metodologie Didattiche
Lezioni frontali teoriche con esercitazioni al calcolatore.
Modalità di verifica dell'apprendimento
La valutazione dello studente sarà articolata come segue:
- Prova scritta, questa è divisa in due parti che si svolgeranno nella stessa giornata.
---- La prima parte consiste in un insieme di domande a risposta multipla che servono a stabilire la capacità dello studente di analizzare codice scritto nel linguaggio di programmazione Python dal punto di vista sintattico, semantico e della complessità computazionale. Verrà assegnato un punteggio tra 0 e 12.
---- Nella seconda parte viene assegnato allo studente un problema computazionale che dovrà risolvere attraverso la progettazione di un algoritmo e la sua implementazione in Python. Questa parte serve a valutare la sua capacità di progettazione, implementazione ed analisi di soluzioni algoritmiche. Verrà assegnato un punteggio che va da 0 a 22.
Le valutazioni delle due prove saranno sommate per ottenere il punteggio finale della prova scritta. Il mancato raggiungimento di un punteggio pari a 18/30 nelle due prove scritte comporta il mancato superamento dell'esame.
- Prova orale. Verte in una discussione dell'esame scritto per analizzare la capacità di sintesi verbale e per stabilire se durante la prova scritta lo studente ha lavorato in completa autonomia. Questa prova può assegnare fino a 2 punti da sommare a quelli della prova scritta. Tuttavia l'evidenza di grosse lacune manifestate in questa fase possono comportarere una valutazione negativa fino, in casi estremi, al mancato superamento dell'esame.
La lode viene assegnata al raggiungimento del punteggio di 32.
Criteri per l’assegnazione dell’elaborato finale
Superamento dell'esame
Interesse per la materia
Settimana 1
Metodo computazionale: problema, modello algoritmo, programma. Introduzione a Python: l'interprete, variabili, il while loop, condizioni, operatore di assegnamento, operatori matematici, tipi di dato, assegnamento e binding, operatori di test, operazioni su stringhe; blocchi.
Settimana 2
Le funzioni print() e input(); conversioni fra tipi; gestione del flusso di programma; verifica dell'input; gestione delle eccezioni; indicizazione di stringhe; la funzione len(); la struttura for.
Settimana 3
La funzione range(); le operazioni di slicing di stringhe; Definizioni di funzioni custom; metodi in Python; metodi su stringhe.
Settimana 4
L'operatore in. Visibilità di variabili. Introduzione al costo computazionale degli algoritmi. La struttura dati lista; il metodo append(); operatori di indicizzazione e slicing; cancellare ed editare elementi di una lista; aliasing e clonazione; liste come parametri di funzione; la funzione max().
Settimana 5
Gli operatori su liste. Tuple: definizione; packing; unpacking. Il metodo sort() e la funzione sorted(); utilizzo del parametro key; la stabilità del sorting; costo computazionale del sorting.
Settimana 6
La struttura dai dizionario; i metodi keys() e values(); l'istruzione in; costo computazionale dei metodi e funzioni per dizionari. Dizionari per rappresentare insiemi in modo conveniente.
Settimana 7
Costo computazionale: analisi del caso peggiore ed analisi del caso medio; notazione big-O; costo di alcune funzioni e metodi. Ordinare gli elementi di un dizionario; il metodo items(). Leggere file di testo: semplice analisi di testo.
Settimana 8
Output su file formattato; parametri della funzione open(). Ricorsione e programmazione. Lo stack di attivazione e la gestione della ricorsione. Importare moduli in Python. Strategia di ricerca binaria; costo computazionale della ricerca binaria.
Settimana 9
Implementazione interattiva dell'algoritmo di ricerca binaria. L'algoritmo quicksort: implementazione e costo computazionale. Rendere stabile il quick-sort. La funzione zip() e l'operatore di unpack.
Settimana 10
L'algoritmo counting sort: codice e costo computazionale. Scrivere moduli personalizzati. Classe ed oggetti in Python: attributi e metodi. Definizione di classi personalizzate: inizializzazione introduzione di attributi; metodi e operatori; attributi pubblici e privati.
Settimana 11
Le librerie matplotlib, numpy e pandas.
Settimana 12
Introduzione al machine learning ed al problema della classificazione: il modello k-NN