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:
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:
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()
>>> 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
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
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()
# 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
random
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
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
VisualBasic, 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
if 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
array
from 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
decrementano
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
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
break
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.
Continua a leggere
Cominciare ad usare Python - Parte 2