Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Allora, un linguaggio di programmazione che permette di specificare le istruzioni per risolvere un problema, andare
oltre il codice binario
Le istruzioni:
- In blocchi
- Raccolte in funzioni
Programmi memorizzati in ROM, copiati in RAM una volta eseguiti per l’elaborazione della CPU in sequenza
- Matematiche
- Condizionali
- Cicli (rifare la verifica)
Suddividere un problema complesso in problemi e attività più semplici fino a quando le sotto attività sono semplici
abbastanza da essere eseguite con le operazioni base
1) Dichiarativi
descrivono la realtà e dichiarano l’obiettivo richiesto, senza precisi algoritmi
2) Procedurali
definiscono algoritmi che passo dopo passo portano all’obiettivo
Caratteristiche:
- Sequenza finita
- Procedura porta a un risultato
- Istruzioni eseguibili materialmente
- Istruzioni espresse in modo non ambiguo
Diagramma di flusso
descrive in modo intuitivo le azioni di cui l’algoritmo stesso è composto, rappresentati in blocchi:
- Ovali, inizio/fine
- Romboidi, input/output
- Rettangoli, elementi di esecuzione
- Rombi, elementi di decisione o scelta
- Frecce, flusso d’esecuzione
2. Introduzione a Python
Che cos’è Python
Python è un linguaggio di programmazione di alto livello interpretato, interattivo, orientato agli oggetti, semplice,
che usa la tipizzazione dinamica e fortemente tipizzato, ed è portabile:
IDLE
IDLE (Integrated Development and Learning Environment) è l’ambiente di programmazione di Python, che include
due diverse componenti:
Colori
- Funzioni built-in: viola
- Stringhe: verde
- Output: blu
- Errori: rosso
- Parole chiavi: arancione
- Nomi definiti: blu
- Commenti: rosso
- Commenti fuori righe: verde
Sintassi di Python
Sintassi: insieme di regole che è necessario conoscere e seguire in maniera rigorosa quando si scrive un programma
Parole chiave (parole riservate): parole predefinite di un significato ben preciso e non può essere utilizzata per altri
scopi
Commenti
Possono essere:
- #
- Tra tre apici (‘’’) o tre virgolette (“””): in tal caso possibile scrivere in più righe
Codici di escape
Backslash (\) all’interno di una stringa
Funzioni built-in
Funzione
parte di codice preconfezionata che esegue una determinata operazione
Print
Restituisce un messaggio
parametri:
- Value
il valore che verrà restituito come output
- Sep
separatore da restituire tra i vari testi in output
Help
Usabile nella shell, visualizza le informazioni su una funzione, dato o modulo
3. Calcoli e output dei dati
Operatori matematici e calcoli
1) Parentesi
2) Elevamento a potenza
3) Moltiplicazione e divisione
4) Addizione e sottrazione
- Numero da formattare
- Specificatore di formato
- sum
somma di un elenco di elementi
- pow
elevamento a potenza di un numero
- abs
calcola il valore assoluto
- round
arrotonda un numero in virgola mobile, decimale indicata nel secondo parametro
- max e min
il valore max o min di una serie di parametri (o lista)
4. Variabili e tipi di dati
Variabili e istruzione di assegnazione
Variabile
un nome che rappresenta un valore nella memoria del computer
Istruzione di assegnazione
per creare una variabile mediante l’operatore di assegnazione “=”
Riassegnazione
Le variabili possono referenziare diversi valori durante l’esecuzione di un programma
Quando si assegna un valore a una variabile, questa referenzia il valore fino a che non le si assegna un valore diverso
Riassegnazione
operazione di sostituzione di un valore con un altro
Aggiornamento
Il nuovo valore della variabile dipende da quello precedente
Assegnazione multipla
Inizializzazione o riassegnazione di più variabili con una sola riga di codice
Tipi di dati
Tipizzazione
assunzione della variabile a un certo tipo di dato
Il tipo di dati determina il comportamento di alcune operazioni, mentre altre possono essere svolte solo su valori di
un tipo di dato specifico
- statica
il programmatore deve dichiarare esplicitamente il tipo della variabile nell’assegnazione
- dinamica
l’interprete decide automaticamente il tipo
- int
- float
- str
Nota bene:
Funzione input
Chiede all’utente l’inserimento di un dato
- Struttura sequenziale
flusso lineare delle scelte, la cui esecuzione avviene nell’ordine delle istruzioni
- Struttura decisionale
eseguire un’azione solo a verificarsi di condizioni specifiche
Struttura decisionale
Possono essere:
L’istruzione if
Istruzione decisionale, per una struttura decisionale semplice
Il codice si sposta di un tab – indentazione, serve per far capire cosa è dipendente dalla condizione
Operatori di confronto
L’istruzione if-else
Per una struttura decisionale ad alternativa doppia, rendendo possibile la ramificazione di due possibili percorsi di
esecuzione
L’istruzione if-elif
Per una struttura decisionale di condizioni in serie, come alternativa di if-else nidificate
Elif
consente di specificare un’istruzione per ciascuno dei possibili casi
Gli operatori logici
Operatori booleani
consentono di creare espressioni booleane, esprimere condizioni molteplici, cumulative o alternative
L’istruzione if con in
Permette di allargare la condizione, confronto con un elenco di valori o con un intervallo
L’istruzione pass
Per scrivere temporaneamente un costrutto if, while o for vuoto senza istruzione
Possono essere:
Il ciclo while
Creare un ciclo controllato da una condizione
- Condizione
- Istruzione, ripetuto finché è vera
Necessita delle istruzioni if e break ma non richiede la preventiva inizializzazione della variabile
Il ciclo for
Creare un ciclo controllato da un contatore
La porzione di programma interna al ciclo viene rieseguita un certo numero di volte stabilito
controllato infatti da un contatore
In pratica, alla variabile contatore viene assegnato il primo valore della lista, vengono eseguite le istruzioni, e in
seguito viene assegnato alla variabile il valore seguente del lista – fino all’ultimo valore
La funzione range
range (start, stop [, step])
Restituisce un oggetto che produce una sequenza di numeri interi, compresi tra il valore minimo start (incluso) e il
valore massimo stop (escluso), con incrementi corrispondenti a step
- start
se omesso: 0
- stop
- step
se omesso: 1
Funzioni personalizzate
blocchi di codice a cui viene assegnato un nome
Eseguiti quando chiamati in maniera esplicita
Programma modulare
programma in cui ogni compito svolto da un’apposita funzione
Vantaggi principali:
- Come si chiama
- Quali operazioni deve compiere
Chiamare una funzione
La definizione di una funzione permette a Python di capire quale operazione deve svolgere, ma non la esegue
Una volta che il programma viene caricato, Python tiene in memoria tutte le funzioni con i suoi blocchi di istruzioni
Richiamare la funzione per attivarla
Se sono stati specificati dei parametri nella definizione, è necessario scrivere il loro valore tra le parentesi tonde
Parametri:
- spiegano a Python che alla funzione, quando sarà chiamata, dovranno essere passati dei dati
- consentono di specificare come devono essere utilizzati i dati per eseguire le operazioni previste dalla
funzione
Al parametro opzionale va indicato il valore predefinito, che dovrà assumere se non specificato
È possibile usare entrambi, tuttavia prima gli argomenti per posizione, poi quelli dominati
Funzioni produttive e funzioni void
Funzione produttiva
Gruppo di istruzioni che esegue un compito specifico e, quando termina, restituisce un valore all’istruzione che l’ha
chiamata
Funzione void
Gruppo di istruzioni che esegue un compito specifico, ma quando terminano non restituiscono alcun valore
all’istruzione che le ha chiamate
Ambito
spazio in cui una certa variabile può essere utilizzata
È una stringa di testo racchiusa tra triple virgolette (“””), come prima istruzione subito dopo l’intestazione nella
definizione di una funzione
Visibile nella lettura del codice, ma anche con la funzione help o nel call tip
8. Stringhe e liste
Sequenze
Sequenze
oggetto che contiene diversi dati, memorizzati uno dopo l’altro
Caratteristiche:
- sono iterabili, trattabile come una sequenza e restituisce un elemento per volta
- sono mutabili o immutabili
- la posizione di ciascun valore è identificata da un numero (indice)
- numerose funzioni, metodi e operazioni
Stringhe
Sequenza di caratteri che può contenere caratteri alfanumerici e simboli
L’operatore *
Crea più copie di stringhe, concatenandoli
L’operatore in
- True se una stringa di testo è inclusa nella seconda stringa
- False se no
L’operatore not in
Opposto di in
Liste
Raccolta di diversi dati (detti elementi) di qualsiasi tipo, racchiusi tra parentesi quadre [] e separati da virgole
Assegnate a variabili
L’operatore *
Copia e concatena
Indicizzazione (indexing)
Modo per poter accedere ai singoli elementi di una sequenza
Indice
il numero intero che identifica la posizione di ogni elemento all’interno della sequenza
Sintassi: sequenza[indice]
Se la sequenza è mutabile, con la stessa sintassi è possibile modificare gli elementi di una sequenza
Altrimenti, errore
Slicing
Selezionare più elementi di una sequenza contemporaneamente, tramite gli indici degli elementi della sequenza
Sintassi: sequenza[indice_iniziale:indice_finale:step]
L'operazione restituisce tutti gli elementi della sequenza tra quello con indice_iniziale (compreso) e quello con
indice_finale (escluso). Step è opzionale e indica quali indici successivi selezionare dopo il primo
Se step negativo:
Funzioni
Metodi
Il metodo split
Divide la stringa in parole, generando una lista nelle quale gli elementi sono le parole provenienti dalla stringa
Il metodo join
Crea una stringa di testo concatenando le stringhe o gli elementi di una lista
In particolare, il metodo si applica alla stringa con il separatore, e non alla lista!
La lista dunque da inserire tra parentesi
Il metodo append
Aggiunge nuovi elementi alla lista, come l’ultimo elemento
Il metodo insert
Inserisce un elemento in una determinata posizione di una lista
Parametri:
- remove
specificare l’elemento da eliminare
- pop
specificare l’indice dell’elemento
Inoltre non si limita ad eliminare, ma anche restituire lo stesso elemento (quindi memorizzabile)
Inoltre, questi non restituiscono un valore, ma l’effetto sulla stessa lista cui sono applicati
Il metodo count
Restituisce il numero di volte che un determinato elemento compare nella lista
Si utilizzano:
- l’indicizzazione o lo slicing
- i cicli
- metodi e funzioni
9. Tuple e dizionari
Tuple
Sequenza contenente dati di qualsiasi tipo, chiusi tra parentesi tonde e separati dalle virgole
Possibile l’uso di indicizzazione e dello slicing, ma non per assegnare nuovi elementi
Dizionari
Oggetto che contiene una collezione di dati
- Chiave, dato univoco di qualsiasi tipo, immutabile, utilizzate per trovare i valori
- Valore, associato alla chiave, qualsiasi tipo di dato mutabile o immutabile
Sono mutabili, quindi sempre possibile aggiungere una nuova coppia chiave-valore a un dizionario già esistente o
vuoto
nome_dizionario[chiave] = valore
Per accedere ai valori memorizzati nel dizionario, si utilizza la chiave corrispondente
nome_dizionario[chiave]
Operatori
Non utilizzabili + e * poiché struttura chiave-valore del dizionario, altrimenti errore
del
eliminare una coppia chiave-valore, o l’intero dizionario
in/ not in
True se trovata una chiave / non trovata nel dizionario
is e is not
non solo se I due dizionari sono identici, ma anche se sono l’uno la copia dell’altro
Funzioni
Funzione len
Restituisce il numero di coppie chiave-valore di un dizionario
Funzione dict
Crea un dizionario vuoto
Ma, se come argomento un oggetto iterabile: crea anche dizionario non vuoto
Tuttavia solo se oggetto iterabile composto da coppie di elementi
Se una semplice lista – errore
Funzione sorted
Non modifica il dizionario, restituisce una lista con le sue chiavi in maniere crescente
Metodi
Metodo clear
Elimina tutte le coppie chiave-valore lasciando il dizionario vuoto
Metodo get
Restituisce il valore associato ad una determinata chiave specificata come argomento
- chiave
obbligatorio, la chiave da cercare
- default
opzionale, specifica il valore restituito se la chiave non viene trovata
Alternativa all’indicizzazione
Metodo pop
Rimuove la coppia chiave-valore specificato
- chiave
obbligatorio, la chiave da cercare
- default
opzionale, specifica il valore restituito se la chiave non viene trovata
Metodo popitem
Rimuove l’ultima coppia chiave-valore aggiunta, restituendo una tupla con due elementi
Possibile allora convertire i view object in liste mediante la funzione list (in questo modo si interrompe il
collegamento con il dizionario di origine)
10. Accesso ai file e gestione degli errori
Accedere ai file
Il processo di accesso ai dati consiste in:
Funzione open
Funzione per accedere un file
Crea un oggetto file a cui viene associato lo specifico file che vogliamo aprire
necessario essere referenziato da una variabile
- File (obbligatorio), stringa di testo che specifica il nome del file e il suo percorso
- Mode (opzionale), stringa di testo sulla modalità di apertura del file
Se il file non esiste, viene creato da Python nella posizione specificato nell’argomento
Metodo close
Per il salvataggio nel file
altrimenti rischio che il programma che non salvi automaticamente il file
Attributi al file
Possono essere:
Metodo read
Legge il contenuto dell’intero file
Metodo readline
Legge e restituisce il contenuto di una riga del file
Puntatore si sposta nell’inizio della riga successiva
Metodo readlines
Legge righe per righe fino al termine del file
Restituisce una lista di tutte le righe quali elementi
Metodo tell
Restituisce la posizione esatta del puntatore, espressa in byte di distanza dall’inizio
Metodo seek
Muovere il puntatore in una nuova posizione
Argomenti:
- writable()
True se è possibile scrivere dati nel file
- write(string)
scrivere i dati dell’argomento (in stringa) nel file – puntatore al fine del testo (quindi \n per inserire la riga)
- writelines(lines)
scrive nel file la sequenza di righe specificate nell’argomento
Errori di sintassi
Errore nella scrittura del codice
Nel salvataggio, Python segnala l’errore evidenziando in rosso la parte del codice mostrando il messaggio Invalid
syntax
Python ci comunica:
Tuttavia non sempre molto chiara, e lo può rivelare anche righe prima
Errori di runtime
Errore nel codice per operazioni che Python non può eseguire o che non comprende
Errori semantici
Programma eseguito senza errore, ma con risultati non corretti, imprevisti e non desiderati
Difficile da individuare, richiede una rilettura passo a passo, o l’uso di strumenti di debugging più sofisticati (es.
Debugger)
Durante l’esecuzione del codice, al verificarsi dell’errore, Python salta al blocco di codice dell’istruzione except senza
terminare quella di try
Altrimenti, il blocco except verrà saltato
Debugging
Attività di ricerca e di rimozione degli errori, ma anche nello studio del codice per renderlo più efficiente
Processo sperimentale
si cerca di risalire alla causa del problema, rileggendo il codice, individuando la parte problematica, correggendo il
codice e infine eseguendolo di nuovo
Ripetuto finché si risolve il problema
11. Le librerie di Python
Definizione di modulo
File script che contengono blocchi di codice che svolgono azioni o calcoli specifici
Ogni blocco identificato con un suo nome
Moduli sono organizzati per finalità di utilizzo e contenuti omogenei, rendendo possibile la riusabilità del codice
Possono essere:
L’istruzione import
L’istruzione con cui si caricano nella memoria RAM i contenuti di un modulo o di una libreria
Possibile importare sulla stessa riga più moduli separati dalla virgola
As
Possibile accorciare il nome con la parola riservata as
in quel modo, non più possibile usare il nome per esteso
From
Per importare una funzione specifica
Funzione help(‘modules’)
Riporta i moduli installati nel programma
Funzione dir()
Riporta i moduli attualmente attivi nella sessione
Se con modulo come argomento, permette di esaminare il contenuto dei singoli moduli
se oggetto come argomento, lista di tutte le caratteristiche/attributi
La libreria standard di Python
Il modulo os e os.path
Modulo che permette a Python di interagire con il Sistema Operativo – ispezionare e manipolare file e cartelle
Il modulo random
Il modulo webbrowser
Consente la visualizzazione di documenti web comandando da Python il browser impostato come default sul
computer
Aprire la pagina web relativa all’indirizzo URL passata alla funzione open come stringa
Librerie di terze parti
Come installare
L’installazione può avvenire in due modi:
La libreria openpyxl
Modulo non standard per leggere e scrivere file Excel con Python
12. Classi, attributi, metodi
Programmazione a oggetti
Oggetti
elementi che possono rappresentare un valore o eseguono azioni
Nel paradigma a oggetti, la programmazione non è più una gerarchia piramidale di processi e sottoprocessi, ma un
insieme di oggetti collegati e comunicanti fra loro – tra cui si interagiscono
I principi di OOP:
- Incapsulamento
non rendere visibili agli altri oggetti le caratteristiche strutturali e di funzionamento di una classe, e
l’interazione solo tramite i metodi
(in tal modo più facilmente condivisibile, semplice da testare, più sicuro e più produttivo)
- Ereditarietà
meccanismo di costruzione che permette di costruirne di nuove a partire da altre esistenti
permettendo di ereditare attributi e metodi a quelle a valle
- Polimorfismo
possibile dare il medesimo nome a metodi che compiono lo stesso tipo di azione su oggetti differenti
- Attributo
le caratteristiche della classe che permettono di istanziare (creare) o identificare le differenti istanze della
classe
(es. il valore di una stringa è l’attributo di str)
- Metodi
funzioni/azioni che gli oggetti di una classe possono compiere
(es. upper, metodo della classe string)
I literals in Python
I tipi di dato elementare e le strutture dati complesse
Differenza: per creare le istanze dei literals non è necessario invocare il metodo costruttore, ma una sintassi dedicata
(es. parentesi graffe tuple)
In Python, il tipo è legato all’oggetto stesso che, per le logiche di incapsulamento, non può essere cambiato
Quindi, non è possibile convertire una variabile o un oggetto da un tipo a un altro
Di conseguenza, la conversione non modifica l’oggetto originale, ma ne crea uno nuovo, riassegnando il nome al
nuovo oggetto che occupa in un differente spazio nella memoria
Tutte le istanze di una classe ereditano attributi e metodi della classe a cui appartengono
Gli attributi ereditati dalle singole istanze possono essere assegnati in fase di creazione dell’istanza e/o modificati in
un secondo momento
Attributi
Possono essere basati su qualunque tipo di dato, servono per customizzare la classe in singole istanze
Il metodo costruttore non fa calcoli in quanto non è una funzione produttiva, solo per definire e valorizzare gli
attributi della futura istanza (per cui niente return)
Anche se non viene specificamente indicato, la classe eredita in ogni caso il costruttore della classe object
Metodi
Procedure che eseguono istruzioni
Possono restituire un valore attraverso l’istruzione return
Docstring
Possibile le stringhe di documentazione immediatamente dopo la prima riga con i due punti
Modulo copy
Funzione copy.copy crea il duplicato di un oggetto, lasciando intoccato l’originale
Il metodo speciale __str__
Permette di costruire la rappresentazione informale di un oggetto in formato stringa
inserire qualunque informazione utile per l’utilizzatore
Se il metodo non è stato definito, Python recupera l’analogo metodo definito nell’oggetto predefinito object –
visualizza cioè l’indirizzo di memoria in cui l’istanza è archiviata
In tal modo, ciò che viene visualizzato è il risultato del metodo speciale __str__
Metodi appositi:
Ereditarietà
Esercizi memorabili
10.6
12.9
12.13
13.3
13.8
13.10
14.5
14.6
14.7
14.8
14.9
14.12