1.2 Python Intro
1.2 Python Intro
DELLA BASILICATA
https://www.youtube.com/watch?v=l9KYJlLnEbw
Il Python
È un linguaggio di programmazione:
• Interpretato
• Di alto livello
• Orientato agli oggetti
• Semplice da imparare e usare
• Potente e produttivo
• Ottimo anche come primo linguaggio (molto simile allo pseudocodice)
• Estensibile
• Con una tipizzazione forte e dinamica
Inoltre:
• È open source (www.python.org)
• È multipiattaforma
• È facilmente integrabile con C/C++ e Java
Un po’ di storia
Python è stato creato nel 1989 dall’informatico
olandese Guido van Rossum
(https://gvanrossum.github.io/)
https://www.economist.com/graphic-detail/2018/07/26/python-is-becoming-the-worlds-most-popular-coding-language
Versioni di Python
Sono al momento disponibili due versioni principali di Python:
• Python 2
• Python 3
Python 2
Pubblicato alla fine del 2000, Python 2 ha espresso un processo di sviluppo del
linguaggio più trasparente e completo rispetto alle versioni precedenti di Python
tramite l’implementazione della PEP (Python Enhancement Proposal), una
specifica tecnica che fornisce delle informazioni ai membri della comunità Python
oppure descrive una nuova funzionalità del linguaggio.
Nella versione 2.2 sono state aggiunte altre funzionalità, tra cui l’unificazione dei
tipi e delle classi di Python in una gerarchia.
Python 3
Python 3 è la versione del linguaggio attualmente in fase di sviluppo.
Python 3 è stato rilasciato alla fine del 2008 per affrontare e modificare alcuni
difetti di progettazione delle precedenti versioni del linguaggio. L’obiettivo dello
sviluppo di Python 3 è stato quello di ripulire il codice base e rimuovere la
ridondanza.
L’intento di Python 2.7 è stato quello di rendere più facile per gli utenti Python 2.x
effettuare il porting di certe caratteristiche verso Python 3, fornendo un certo
grado di compatibilità tra i due.
Questo supporto alla compatibilità include moduli avanzati per la versione 2.7
come unittest che supporta l’automazione dei test, argparse per fare il parsing
delle opzioni della riga di comando e le più convenienti classi in collections.
https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/
Google Colab
Colaboratory è un tool per la ricerca specifico per applicazioni di
machine learning. É un ambiente Jupyter notebook (https://jupyter.org/)
che non richiede l’installazione di alcuna libreria,
poiché è già pronto per l’uso.
Colaboratory può essere usato con i più diffusi browser
ed è testato sulle versioni desktop di Chrome e Firefox.
Colaboratory è un progetto di ricerca che viene distribuito
in accordo alla licenza BSD 3-Clause "New" or "Revised" License.
Google impone dei limiti temporali per l’uso continuativo della macchina
virtuale (12 ore)
Primo programma Python con Google Colab
1. Apriamo il
nostro Google
Drive
3. Spostiamoci
nella cartella
‘esercizi-python’
7. Selezionare ‘OK’
Selezioniamo l’applicazione Colaboratory
8. Usiamo il tasto
destro del mouse
per selezionare
‘Altro’ e poi
troveremo la
nuova voce
‘Colaboratory’
Creiamo un file Colaboratory
9. Verrà creato un
file ‘Untitled0.ipynb’
che possiamo usare
per creare il nostro
primo programma in
Python
Selezionando ‘Run
cell’ possiamo
eseguire il nostro
codice e ottenere
l’output
Comandi di shell in Colab
Possiamo utilizzare comandi di shell
facendoli precedere dal simbolo ‘!’
http://linuxcommand.org/lc3_man_pages/echoh.html
Interprete interattivo del Python
Python dispone di un interprete interattivo molto comodo e
potente
Per attivarlo possiamo digitare la parola python al prompt di
una shell su un pc in cui è installato Python
I file sorgente Python sono file di testo, generalmente con estensione “.py”
Interprete interattivo del Python
Introducendo “#! /usr/bin/env python” come prima riga su Unix il sorgente viene
eseguito senza dover manualmente invocare l’interprete
Per far continuare un’istruzione anche sulla linea successiva è necessario inserire il
simbolo “\” a fine riga
Se le parentesi non sono state chiuse, l’istruzione si estende anche sulla riga successiva
Modalità interprete
Digitando dei comandi Python in modalità interprete interattivo si ottiene subito una
risposta:
>>> 5 * 3
15
>>>
>>> a = 5
>>> b = 6
>>> 2 * (a+b) + 3*a
37
Interprete in Colab
Per lanciare l’interprete Python su
Colab possiamo scrivere
!python
Script in Python
L’interprete interattivo è in grado di leggere e valutare man mano le espressioni
inserite dall’utente, ma è anche possibile eseguire script contenenti sequenze di
istruzioni Python, digitando il comando:
python script.py
Ogni volta che viene invocato il comando python, il codice scritto viene
scansionato per token, ognuno dei quali viene analizzato dentro una struttura logica
ad albero che rappresenta il programma.
Tale struttura viene, infine, trasformata in bytecode (file con estensione .pyc o .pyo).
Per potere eseguire questi bytecode, si utilizza un apposito interprete noto come
macchina virtuale Python (PVM).
Bytecode
Esempio
https://opensource.com/article/18/4/introduction-python-bytecode
Variabili e istruzione di assegnamento: sintassi
Sintassi:
variabile = espressione
Esempi:
x = -3.2
messaggio = "Buongiorno"
y = x + 1
Limitazioni sui nomi delle variabili
• possono essere composti da uno o più dei seguenti caratteri:
- lettere minuscole e maiuscole (NB: «A» e «a» sono considerate lettere diverse)
- cifre
- il carattere _ (underscore)
esempi: x, somma, Massimo_Comun_Divisore, y_1
• non devono iniziare con una cifra
esempio: 12abc non è un nome ammesso
• non devono contenere simboli matematici (+, -, /, *, parentheses)
• non devono coincidere con le keywords del linguaggio
Le espressioni Python che producono valori appartenenti a tali tipi di dati, e che possono
contenere opportuni operatori, sono le seguenti:
• espressioni aritmetiche
• espressioni stringa
Espressioni aritmetiche
La più semplice espressione aritmetica è un singolo numero.
I numeri vengono rappresentati nelle istruzioni Python con diverse notazioni, simili a quelle
matematiche, espressi in base dieci.
Python distingue tra due tipi di dati numerici:
• numeri interi, codificati nei calcolatori in complemento a due; esempi: 12, -9
• numeri frazionari ( floating point ), codificati in virgola mobile, e rappresentati nei programmi:
- come parte intera e frazionaria, separate da un punto (notazione anglosassone)
esempi: 3.14, -45.2, 1.0
- in notazione esponenziale, m×be, con base b pari a dieci ed esponente introdotto dal
carattere E oppure e
esempi: 1.99E33 (1,99 × 1033), -42.3e-4 (−42,3 × 10−4), 2E3 (2 × 103)
NOTA: i numeri espressi in notazione esponenziale sono sempre considerati numeri frazionari
Operatori aritmetici
Espressione aritmetiche più complesse si ottengono combinando numeri attraverso
operatori (addizione, divisione, ecc.), e usando le parentesi tonde per definire la precedenza
tra gli operatori.
Gli operatori disponibili nel linguaggio Python sono i seguenti:
simbolo operatore
+ somma
- sottrazione
* moltiplicazione
/ divisione
// divisione (quoziente intero)
% modulo (resto di una divisione)
** elevamento a potenza
Espressioni aritmetiche: esempi
Alcuni esempi di istruzioni di assegnazione contenenti espressioni aritmetiche.
Il valore per ogni espressione è indicato in grassetto sulla destra.
x = -5 -5
y = 1 + 1 2
z = (1 + 2) * 3 9
circonferenza = 2 * 3.14 * 3 18.84
q1 = 6 / 2 3
q2 = 7.5 / 3 2.5
q3 = 5 // 2 2
resto = 10 % 2 0
Rappresentazione del risultato
Se entrambi gli operandi di +, - e * sono interi, il risultato è rappresentato come intero
(senza parte frazionaria), altrimenti è rappresentato come numero frazionario.
Esempi: 1 + 1 → 2, 2 - 3.1 → -1.1, 3.2 * 5 → 16.0
Anche se entrambi gli operandi di / sono interi, il risultato è invece sempre frazionario,
come del resto accade se uno o entrambi gli operandi non sono interi.
Esempi: 6 / 2 → 3.0, 6.0 / 2 → 3.0, 2 / 5 → 0.4,
2 / 5.0 → 0.4, -2 / 3 → -0.6666666666666666
L’operatore // produce sempre il più grande intero non maggiore del quoziente,
rappresentato come intero se entrambi gli operandi sono interi, altrimenti come numero
frazionario.
Esempi: 6 // 2 → 3, 6.0 // 2 → 3.0, 2 // 5 → 0,
2 // 5.0 → 0.0, -2 // 3 → -1
Prova su Colab
Espressioni: stringhe
I programmi Python possono elaborare testi rappresentati come sequenze di caratteri (lettere, numeri, segni
di punteggiatura) racchiuse tra apici singoli o doppi, dette stringhe.
Esempi:
"Esempio di stringa"
'Esempio di stringa'
"A"
'qwerty, 123456'
"" (una stringa vuota)
Esempi:
parola = "mappa" + "mondo"
assegna alla variabile parola la stringa "mappamondo"
\\ Backslash (\)
\' Carattere di quotatura singola (')
\" Carattere di quotatura doppia (")
\a ASCII Bell (BEL)
\b ASCII Backspace (BS)
\f ASCII Formfeed (FF)
\n ASCII Linefeed (LF)
\N{name} Carattere chiamato name nel database Unicode (solamente in Unicode)
\r ASCII Carriage Return (CR)
\t ASCII Tab orizzontale (TAB)
\uxxxx Carattere con valore esadecimale a 16 bit xxxx (valido solo per Unicode)
\Uxxxxxxxx Carattere con valore esadecimale a 32 bit xxxxxxxx(valido solo per Unicode)
\v ASCII Tab verticale (VT)
\ooo Carattere ASCII con valore ottale ooo
\xhh Carattere ASCII con valore esadecimale hh
Sequenze di escape: esempio Colab
Espressioni contenenti nomi di variabili
Una espressione contenente il nome di una variabile alla quale non sia stato ancora assegnato
alcun valore è sintatticamente errata.
Per esempio, assumendo che alla variabile h non sia ancora stato assegnato alcun valore,
l'istruzione
x = h + 1
valore = input()
l’interprete resta in attesa che l’utente inserisca nella shell, attraverso la tastiera, una sequenza di caratteri che dovrà
essere conclusa dal tasto <INVIO>. Questa sequenza di caratteri è poi inserita in una stringa che viene restituita come
valore.
dato = input(messaggio)
l’interprete stampa messaggio, che deve essere una stringa, nella shell, poi procede come indicato sopra.
La stringa messaggio viene di norma usata per indicare all’utente che il programma è in attesa di ricevere un
particolare dato in ingresso.
Nel caso di dati numerici, occorrerà convertire con int o float in intero o frazionario il valore str restituito da
input
dato = float(input('quanto vale pi greco? '))
La funzione input(): Esempio Colab
La funzione print
Sintassi:
print(espressione)
• non devono esserci spazi prima di print
• espressione deve essere una espressione valida del linguaggio Python
Semantica:
viene mostrato sullo standard output il valore di espressione
È anche possibile mostrare con una sola istruzione print i valori di un numero qualsiasi di
espressioni, con la seguente sintassi:
print(espressione1, espressione2, ...)
In questo caso, i valori delle espressioni vengono mostrati su una stessa riga, separati da un
carattere di spaziatura.
Commenti
È sempre utile documentare i programmi inserendo commenti che indichino quale operazione
viene svolta dal programma, quali sono i dati di ingresso e i risultati, qual è il significato delle
variabili o di alcune sequenze di istruzioni.
Nei programmi Python i commenti possono essere inseriti in qualsiasi riga, preceduti dal
carattere # (“cancelletto”).
Tutti i caratteri che seguono il cancelletto, fino al termine della riga, saranno considerati
commenti e verranno trascurati dall’interprete.
Commenti su più linee
Algebra di Boole
Il matematico britannico George Boole (1815-1864)
trovò il modo di legare argomenti logici ad un
linguaggio che potesse essere manipolato
matematicamente.
• Una relazione fra due espressioni per mezzo degli operatori relazionali
come ==, !=, <, >, <=, >=
Espressioni booleane: esempio Colab
Operatore booleano and
Se x e y sono booleani, possiamo completamente determinare i valori
possibili di x and y usando la seguente «tavola di verità»:
simbolo significato
== “uguale a”
!= “diverso da”
< “minore di”
<= “minore o uguale a”
> “maggiore di”
>= “maggiore o uguale a”
Espressioni condizionali composte
Sintassi:
• espr_cond_1 and espr_cond_2
• espr_cond_1 or espr_cond_2
• not espr_cond
É possibile usare le parentesi tonde per definire l'ordine degli operatori logici
L’istruzione condizionale
Sintassi:
if espr_cond:
sequenza_di_istruzioni_1
else:
sequenza_di_istruzioni_2
Variante elif:
if espr_cond_1:
sequenza_di_istruzioni_1
elif espr_cond_2:
sequenza_di_istruzioni_2
else:
sequenza_di_istruzioni_3
Attenzione ai rientri!
I rientri sono l’unico elemento sintattico che indica quali istruzioni fanno parte di
un'istruzione condizionale. Le istruzioni che seguono un'istruzione condizionale
(senza farne parte) devono quindi essere scritte senza rientri.
Come esempio, si considerino le due sequenze di istruzioni:
if x > 0: if x > 0:
print("A") print("A")
print("B") print("B")
Nella sequenza a sinistra le due istruzioni print sono scritte con un rientro rispetto a if:
questo significa che fanno entrambe parte dell’istruzione condizionale e quindi verranno
eseguite solo se la condizione x > 0 sarà vera.
Nella sequenza a destra solo la prima istruzione print dopo if è scritta con un rientro e
quindi solo essa fa parte dell’istruzione condizionale; la seconda istruzione print verrà
invece eseguita dopo l’istruzione condizionale, indipendentemente dal valore di verità
della condizione x > 0
Istruzioni condizionali annidate
Una istruzione condizionale può contenere al suo interno istruzioni qualsiasi, quindi
anche altre istruzioni condizionali. Si parla, in questo caso, di istruzioni annidate.
L’uso di istruzioni condizionali annidate consente di esprimere la scelta tra più di due
sequenze di istruzioni alternative.
Una istruzione condizionale annidata all’interno di un'altra andrà scritta tenendo conto
che:
• le keyword if, elif e else (se presenti) devono essere scritte con un rientro
rispetto a quelle dell'istruzione condizionale che le contiene
• le sequenze di istruzioni che seguono if , elif e else devono essere scritte con
un ulteriore rientro
Istruzioni condizionali annidate: esempio
if x > 0:
print("A")
if y == 1:
print("B")
else:
print("C")
print ("D")
else:
print ("E")
Esempio in Colab
Cast dei dati
Verifica del tipo di dato
Gestione delle eccezioni
UNIVERSITÀ DEGLI STUDI
DELLA BASILICATA