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.exeTutti 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
LinuxInfo
Le caratteristiche
principali sono:
- linguaggio interpretato (come JavaScript in NodeJs)
- variabili non tipizzate (come JavaScript)
- un forte uso dell'indentazione per le istruzioni di test, cicli, funzioni, ecc...
La prima cosa che si può fare è, ad esempio, utilizzare l'istruzione
print() per stampare:
>>> print(1 + 2)
3
>>> print("ciao" + " " + "mondo")
ciao mondo
Variabili
Come dicevo le variabili
non sono tipizzate, è possibile assegnare qualunque valore semplicemente definendo il nome della variabile e assegnandogli un valore
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:
Una cosa
importante da ricordare, non esiste un
cast implicito tra più tipi come avviene in
JavaScript. Ad esempio questo genera un eccezione:
x = 1
a = "3"
print(x + a)
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>>> 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
#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
>>> mia_stringa = "ciao mondo"
>>> mia_stringa.upper()
'CIAO MONDO'
>>> mia_stringa.lower()
'ciao mondo'
>>> mia_stringa.capitalize()
'Ciao mondo'
>>> mia_stringa.count()
TypeError: count() takes at least 1 argument (0 given)
>>> mia_stringa.count("0")
3
>>> mia_stringa
'ciao mondo'
se invece voglio calcolare la lunghezza di una stringa uso la funzione
len()
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
graffex = 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
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()# 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
# 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
randomimport 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
MaiuscolaDate
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
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
# 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()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()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
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
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
inif frutta in ('mele', 'pere', 'arancie'):
print("OK")
se voglio fare una comparazione
case insensitive uso la funzione
lower()if frutta.lower() in ('mele', 'pere', 'arance'):
print("OK")
l'operatore
in è la forma compatta di
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
valore_Vero if espressione else valore_Falso
ad esempio
>>> 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
l'equivalente in
JavaScript è
espressione ? valoreVero : valoreFalso
Collection
Come altri linguaggi,
Python, supporta vari tipi di collection come:
Liste,
Array e
DizionariListe / List
Le liste si creano delimitando i valori in parentesi quadre
[ ... ]lista_vuota = []
lista_citta = ["Milano", "Como", "Bergamo"]
print(lista_citta)
# ['Milano', 'Como', 'Bergamo']
# aggiungo valori alla lista
lista_citta.append("Verona")
print(lista_citta)
# ['Milano', 'Como', 'Bergamo', 'Verona']
print(lista_citta[1]) # secondo elemento della lista
# como
lista_citta.insert(0, "Torino") # inserisce un valore all'inizio
# ['Torino', 'Milano', 'Como', 'Bergamo', 'Verona']
len(lista_citta)
# 5
lista_citta.sort()
print(lista_citta)
# ['Bergamo', 'Como', 'Milano', 'Torino', 'Verona']
print(lista_citta[2:3]) # dal terzo elemento al quarto
#['Milano', 'Torino']
Array
Per usare gli
Array, deve prima essere importata la libreria
arrayfrom array import array
vari = array("f") # array di float (f)
vari.append(11)
vari.append(12.5)
vari.append(4.75)
print(vari)
# array('f', [11.0, 12.5, 4.75])
print(vari[-1]) # ultimo elemento
# 4.75
Le differenze principale tra
List e
Array sono:
- List: può contenere qualunque tipo di dato
- Array: può contenere solo tipi semplici, come i numeri, inoltre devono essere tutti dello stesso tipo
Anche sugli
Array posso usare le funzioni delle
List come:
insert,
sort, ecc...
Dictionary
Un
Dictionary è una collection composta da una serie di
chiavi e
valori compresi tra le parentesi graffe
{ ... }persona = {"nome": "Alberto", "citta": "Monza"} # creo un dictionary
print(persona)
# {'nome': 'Alberto', 'citta': 'Monza'}
print(persona["nome"])
# Alberto
persona["login"] = "local\\alberto" # aggiungo una coppia chiave=valore
print(persona)
# {'nome': 'Alberto', 'citta': 'Monza', 'login': 'local\\alberto'}
posso aggiugere un dictionary ad una lista
lista_citta.append(persona)
print(lista_citta)
# ['Bergamo', 'Como', 'Milano', 'Torino', 'Verona', {'nome': 'Alberto', 'citta': 'Monza', 'login': 'local\\alberto'}]
o aggiungere una lista ad un dictionary
persona["numeri"] = [1, 3, 7]
print(persona)
# {'nome': 'Alberto', 'citta': 'Monza', 'login': 'local\\alberto', 'numeri': [1, 3, 7]}
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
whilefor
Le sintassi per il
for sono due:
- for variabile in collection
- for variabile_indice in range(start, stop, step)
# 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)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
decrementanofor 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
while espressione_controllo:
istruzioni
modifica_espressione_controllo
ad esempio
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
breaklista_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.
Continua a leggere
Cominciare ad usare Python - Parte 2