Python è un linguaggio di programmazione multi piattaforma interpretato, interattivo e orientato agli oggetti. Può essere utilizzato su Windows, Linux, macOS, Azure e altri servizi online.
Prima di poter utilizzare Python è necessario installarlo dal sito ufficiale https://www.python.org/
(l'ultima versione ad oggi è la 3.7.4).
Esistono attualmente due versioni principali, la 2.x e la 3.x, se non avete vincoli particolari, installate l'ultima versione. Su alcuni sistemi è già presente. Ad esempio alcune versioni di Linux hanno già installato la versione 2.x richiamabile con il comando python, mentre la versione 3.x è richiamabile con il comando python3. Su Windows è richiamabile con il comando py.exe
Tutti gli esempi riportati fanno riferimento alla versione 3.x su Windows.
L'installer mette a disposizione anche il comando pip, ovvero il gestore di pacchetti di Python.
Su Linux la versione 3.x richiede l'uso del comando pip3, può essere necessario installarlo a parte.
Su Windows 10 il comando python apre lo store di Windows proponendo l'installazione di Python, al momento la versione disponibile è la 3.7. Come dice l'avviso non è detto che siano supportate tutte le caratteristiche, meglio installarlo dal sito ufficiale https://www.python.org/
Per iniziare ad usare Python, apri la linea di comando (cmd.exe) e digita py (su Windows):command line di Pythonquando hai finito, digita quit() per uscire.
In ogni caso il modo migliore per utilizzarlo è usare un editor come Visual Studio Code creando un file con estensione .py. Una volta creato un file è possibile eseguirlo con la sintassi py .\nome_file.py o python3 .\nome_file.py su Linux
Come dicevo le variabili non sono tipizzate, è possibile assegnare qualunque valore semplicemente definendo il nome della variabile e assegnandogli un valore
Python
x = 1
y = 2
c = False
print(x + y)
# 3
a = "ciao" # stringa con virgolette doppi
b = 'mondo' # stringa con virgolette singole
print(a + " " + b)
# ciao mondo
A differenza di altri linguaggi come JavaScript non è necessario far precedere la variabile da una keyword come var, let, const oppure dalla definizione del tipo (int, string, double, ...) come avviene in C#
Altra cosa importante: non serve nessun terminatore di linea, come ad esempio il punto e virgola ";" usato da JavaScript o C#
Le stringhe posso esse definite indifferentemente con le virgolette doppie o singole, ma conviene darsi uno standard e utilizzare sempre la stessa convenzione
Nel caso il nome di variabile sia composto da più parole, la convenzione è quella di scrivere le parole in minuscolo sperate da un underscore:
Python
saldo_finale = 234.5
Una cosa importante da ricordare, non esiste un cast implicito tra più tipi come avviene in JavaScript. Ad esempio questo genera un eccezione:
Python
x = 1
a = "3"
print(x + a)
Text
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
è sempre necessario specificare un cast esplicito
Python
>>> print(x + int(a))
4
>>> print(str(x) + a)
13
Il simbolo + è usato sia come operatore di somma, nel caso di operandi numerici, oppure come operatore di concatenamento nel caso di stringhe.
Commenti
Come in tutti i linguaggi i commenti sono importanti è indispensabili. Servono per:
commentare momentaneamente alcune parti del codice non più necessarie o momentaneamente non necessarie (debug)
chiarire alcune parti del codice
ricordarci cosa abbiamo fatto a distanza di tempo
aiutare i colleghi quando dovranno intervenire sul nostro codice
I commenti sono molto importanti quindi vanno usati.
In Python i commenti iniziano con il carattere sharp/cancelletto #
Python
a = "ciao" # commento in linea
# le seguente istruzione è solo di debug, abilitare se serve
# print("valore di a: " + a)
# questo è un esempio di commento
# e questa è un altra linea di commento
print("commento")
Per convenzione e leggibilità, va lasciato uno spazio dopo il carattere #
Stringhe
Le stringhe, come già accennato, possono essere definite sia tra due apici singoli che tra due doppi apici. Hanno a disposizione varie funzioni per modificare il valore, qui sotto alcune di esempio
se invece voglio calcolare la lunghezza di una stringa uso la funzione len()
Python
>>> len(mia_stringa)
10
Formattazione
Per scenari più complessi, dove non devo semplicemente concatenare due stringhe, ma formattarle secondo un pattern specifico, posso usare 3 formalismi tramite l'uso delle parentesi graffe
Python
x = 1
y = 3
# primo esempio: segue l'ordine posizionale dei parametri
"Risultato: {} + {} = {}".format(x, y, x + y)
# secondo esempio: indico esplicitamente la posizione del parametro da usare
"Risultato: {1} + {2} = {0}".format(x + y, x, y)
# terzo esempio: solo python3, inserisco direttamente le variabili in linea
f"Risultato: {x} + {y} = {x+ y}"
# in tutti i casi il risultato è questo
# 'Risultato: 1 + 3 = 4'
Nell'ultimo esempio la stringa è preceduta dalla lettera f minuscola e le variabile sono inserite direttamente all'interno delle parentesi graffe
Se voglio inserire un ritorno a capo nella stringa posso usare la sequenza di escape \n
Python
print("riga1\nriga2")
Numeri
Per gestire i numeri ci sono i seguenti operatori:
+ (somma)
- (sotrazione)
* (moltipicazione)
/ (divisione)
// (divisione intera)
% (resto della divisione)
** (elevamento a potenza)
Se devo convertire una stringa in numero posso usare le funzioni int() o float()
Python
# converte la stringa "1234" nel numero 1234
int("1234")
# converte la stringa, con separatore decimale, "1.234" nel numero 1.234
float("1.234")
# la seguente istruzione genera un eccezione,
# non posso convertire una string che rappresenta un float in int
int("1.234")
# ValueError: invalid literal for int() with base 10: '1.234'
# devo fare la conversione in due passaggi
int(float("1.234"))
# ritorna 1
Tramite la libreria math ho a disposizione altre funzioni come
Python
# import di tutta la libreria
import math
# calcolo radice quadrata
math.sqrt(9)
# 3.0
# arrotondamento per eccesso
math.ceil(3.45)
# 4
# arrotondamento per difetto
math.floor(3.45)
# 3
math.pi
# 3.141592653589793
Se voglio generare numeri casuali posso usare la libreria random
Python
import random
# numero casuale tra 1 e 10
print(random.randint(1, 11))
Con la sintassi import nome_libreria importo completamente tutta la libreria
Valori boleani
I valori boleani possono assumere il valore True o False e possono essere combinati con gli operatori logici: and, or e not.
Attenzione, rispetto a JavaScript o C#, le keywors True / False hanno la lettera iniziale Maiuscola
Date
Ovviamente spesso si ha a che fare anche con i valori di tipo data e ora. Python mette a disposizione una specifica libreria (standard) per gestire questo tipo di dato di nome datetime.
La libreria va prima caricata con l'istruzione from nome_libreria import item1
Python
from datetime import datetime
# from datetime import datetime, timedelta
La sintassi from nome_libreria import item1, item2, ..., a differenza della precedente import nome_libreria, non importa tutta la libreria, ma solo le parti indicate dopo la keyword import
dopo l'import posso usare la libreria
Python
# data ora corrente
now = datetime.now()
print(now)
# 2019-10-06 23:52:36.458734
# se devo concatenerla ad una stringa devo fare il cast con str()
print("Adesso: " + str(now))
# posso prendere solo alcune parti
f"Data: {now.day}/{now.month}/{now.year}"
# 'Data: 6/10/2019'
nel caso avessi una data in formato stringa, posso fare un parse, usando la funzione datetime.strptime()
Python
str = input("Che giorno è oggi? (gg/mm/aaaa) ")
# Che giorno è oggi? (gg/mm/aaaa) 06/09/2019
dt = datetime.strptime(str , "%d/%m/%Y")
print(dt)
# 2019-09-06 00:00:00
Input
Oltre a visualizzare delle informazioni con print(), posso anche richiede un input all'utente tramite la funzione input()
Python
x = input("primo numero: ")
# primo numero: 1
y = input("secondo numero: ")
# secondo numero: 3
f"Somma di {x} + {y} = {x + y}"
# 'Somma di 1 + 3 = 13'
Istruzioni condizionali
In qualsiasi programma vi è sempre la necessità di condizionare il flusso del codice in base a delle espressioni logiche. Il risultato True o False di queste espressioni, permette di eseguire una parte di codice o meno.
In Python si ottiene con l'istruzione if - elif - else nella forma
Python
if espressione_logica_1:
istruzioni da eseguire se espressione_logica_1 è vera
eventuali altre istruzioni
elif espressione_logica_2 e:
istruzioni da eseguire se espressione_logica_2 è vera
eventuali altre istruzioni
elif espressione_logica_N e:
istruzioni da eseguire se espressione_logica_N è vera
eventuali altre istruzioni
else:
istruzioni eseguite se nessuna condizione è vera
eventuali altre istruzioni
ad esempio
Python
x = input("Inserisci un numero: ")
if x < 0:
# se espressione "if" è vera
print("negativo")
elif x > 0:
# se espressione "elif" è vera
print("positivo")
else:
# se nessuna condizione è vera
print("zero")
Attenzione all'indentazione, in Python è fondamentale per la corretta esecuzione del codice. A differenza di altri linguaggi, non ci sono istruzioni, then else endif come in Visual Basic, oppure caratteri separatori, parentesi graffe ({}) o punto e virgola (;) come in C#, per identificare quali istruzioni sono all'interno dei singoli blocchi dell'if - elif - else. L'unica discriminante è l'Indentazione, quindi è molto importante usare sempre lo stesso sistema di indentazione, ovvero usare sempre gli spazi oppure sempre il tab. Anche in questo caso usa sempre la stessa convenzione univoca e mantienila nel tempo, altrimenti potrebbero verificarsi dei comportamenti inaspettati del codice.
Operatori di comparazione
Gli operatori di comparazione disponibili sono:
> (maggiore)
< (minore)
<= (minore o uguale)
>= (maggiore o uguale)
== (uguale)
!= (diverso)
nel caso di comparazione tra stringhe esiste anche l'operatore in
Python
if frutta in ('mele', 'pere', 'arancie'):
print("OK")
se voglio fare una comparazione case insensitive uso la funzione lower()
Python
if frutta.lower() in ('mele', 'pere', 'arance'):
print("OK")
l'operatore in è la forma compatta di
Python
if frutta == 'mele' or frutta == 'pere' or frutta == 'arance':
print("OK")
dove si vede l'utilizzo dell'operatore or; gli altri operatori disponibili sono and e not.
Fai attenzione al due punti (:) che compare alla fine della riga con l'espressione logica di confronto, è fondamentale come l'indentazione.
Operatore ternario
Anche in Python esiste l'operatore ternario nella forma
Python
valore_Vero if espressione else valore_Falso
ad esempio
Python
>>> print(4 if True else 5)
4
>>> print(4 if False else 5)
5
>>> y = 4
>>> x = "Positivo" if y >= 0 else "Negativo"
>>> print(x)
Positivo
Le differenze principali tra List e Dictionary sono:
List: indicizzazione degli elementi partendo dal valore zero, l'ordine è quello di inserimento
Dictionary: è un elenco di coppie composte da chiave e valore, l'ordine con cui sono persistite, normalmente, non coincide con quello di inserimento
Cicli
Il cicli possono essere gestiti con for o con while
for
Le sintassi per il for sono due:
for variabile in collection
for variabile_indice in range(start, stop, step)
Python
# sintassi basata sulle collection
lista_citta = ['Milano', 'Como', 'Bergamo', 'Verona']
for citta in lista_citta:
print(citta)
# altre istruzioni all'interno del ciclo
# da come risultato
Milano
Como
Bergamo
Verona
se invece voglio fare un ciclo basato su un numero compreso tra un minimo e massimo, uso al funzione range(start, stop, step)
Python
for n in range(3, 8):
print(n)
# da come risultato
3
4
5
6
7
allo stesso modo posso fare un ciclo con numeri che si decrementano
Python
for n in range(10, 1, -2):
print(n)
# da come risultato
10
8
6
4
2
while
Viene esegue il ciclo finché l'espressione di controllo è vera
Python
while espressione_controllo:
istruzioni
modifica_espressione_controllo
ad esempio
Python
n = 0
while n < 5:
print(n)
n = n + 1
# da come risultato
0
1
2
3
4
Nel caso dovessi uscire dal ciclo prima che la condizione di controllo diventi False, posso usare l'istruzione break
Python
lista_citta = ['Milano', 'Como', 'Bergamo', 'Verona']
cerca = "como"
# esempio di find
n = 0
while n < len(lista_citta):
citta = lista_citta[n]
print(citta)
if citta.lower() == cerca.lower():
print(f"Trovato '{cerca}', esco dal ciclo")
break
n = n + 1
# da come risultato
Milano
Como
Trovato 'como', esco dal ciclo
Anche nel caso dei cicli, fai attenzione all'indentazione e ai due punti (:) dopo l'espressione di controllo. Questi due aspetti sono essenziali per il corretto funzionamento.