Fondamentali di Python
In questa lezione introduciamo alcuni componenti fondamentali di Python, in modo da essere subito in grado di scrivere piccoli programmi. Nota per lo studente: si consiglia di utilizzare la modalità notebook (Google Colab) per copiare ed inserire gli esempi, verificarne il funzionamento e sperimentare con proprie varianti.
Sintassi di base
Un programma Python è una sequenza di istruzioni, una per riga, in un file di testo. Non è previsto terminatore di riga.
Le istruzioni devono cominciare da inizio riga, si può indentare una istruzione (o blocco di istruzioni) solo a condizioni specifiche, che vedremo specificatamente caso per caso.
Sono possibili i commenti, sia nella stessa riga che in righe singole, con il carattere #.
Sono poi previste istruzioni speciali per gestire programmi che prevedono più script o importazione di librerie. E’ un concetto che vedremo più avanti.
Variabili, tipi base, espressioni
Come ogni linguaggio di programmazione, Python memorizza i dati in strutture definite variabili. Una variabile è un simbolo con un nome, un tipo di dato associato ed un valore. Il tipo può essere dichiarato esplicitamente oppure viene automaticamente inferito (dedotto) automaticamente dal valore stesso:
x = 4 # int
y = "Mario" # string
z = True # bool
q = 3.1 # float
text = '''Questo è un testo
multilinea'''Tipi
Il tipo determina le operazioni possibili su quella variabile. I tipi base fondamentali sono i seguenti:
int(Interi): Numeri interi, positivi o negativi, di dimensione illimitata (dipende solo dalla memoria).- Esempio:
42,-10,0.
- Esempio:
float(Virgola Mobile): Numeri decimali, basati sui doppia precisione del C.- Esempio:
3.14,-0.001,2e10(notazione scientifica).
- Esempio:
str(Stringhe): Sequenze di caratteri.- Esempio:
"Ciao",'Python'(si possono definire con singole o doppie virgolette); - E’ anche possibile creare stringhe tramite l’operatore
"""che consente di creare stringhe multilinea (le vedremo meglio più avanti).
- Esempio:
bool(Booleani): Usati per le condizioni logiche. Sono una sottoclasse degli interi (Trueè 1,Falseè 0).- Esempio:
True,False.
- Esempio:
None(NoneType): È un valore unico e speciale che rappresenta l’assenza di valore o il vuoto. E’ utilizzato per quelle situazioni in cui bisogna valorizzare una variabile con un valore vuoto.- Esempio:
x = None
- Esempio:
Sono poi previste le variabili contenitore (liste, tuple, set, dizionari), che vedremo più avanti.
Espressioni
Python permette di calcolare il valore di espressioni numeriche, sia di valori che di variabili:
a = x * 3
b = 2 - a
c = b ** 2Sono supportati:
- somma
+, prodotto*, sottrazione- - divisione
/, divisione intera//, modulo (resto)% - potenza
**
a+b #somma
a*b #prodotto
a-b #sottrazione
a/b #divisione in virgola
a//b #divisione intera
a%b #resto
a**b #potenza a^bPython consente inoltre delle operazioni numeriche abbreviate in fase di assegnazione:
a += 1 # a = a + 1
b *= 3 # b = b * 3
c -= 2 # c = c - 2
# e così via Sono disponibili anche le operazioni logiche:
>, <, >=, <=, !=, ==
a > b #maggiore
a < b #minore
a >= b #maggiore o uguale
a <= b #minore o uguale
a == b #uguale
a != b #diversoEsse restituiscono sempre un risultato bool che può essere memorizzato in una variabile, o valutato in una condizione per eseguire istruzioni condizionali o cicli condizionali.
and, or, not:confrontano variabili bool. Ipotizziamo di avere due variabili bool p ed r
r and p # vero se entrambi sono veri
r or p # vero se anche solo uno è vero
not r # l'opposto del valore di r- valori truthy/falsy: Python quando deve utilizzare una espressione bool, trasforma automaticamente una espressione non booleana con queste regole:
- stringa vuota: False altrimenti True
- numero uguale 0: False, altrimenti True
- qualsiasi elenco di dati vuoto: False, altrimenti True
- None: False, altrimenti True
I/O
Il tipo più semplice di applicazione Python è un programma da terminale solo testo: il programma si interfaccia con l’utente tramite una interfaccia solo testo e richiede eventuale input tramite prompt testuali. Alla base dell’interazione con l’utente sono disponibili le istruzioni input e print.
Input
La struttura dell’input è questa:
input([prompt])Dove prompt è il messaggio di invito all’utente per inserire dati. L’uso delle parentesi quadre indica che il prompt non è obbligatorio. L’input di norma va memorizzato in una variabile:
name = input("Come ti chiami? ")Questa istruzione:
- mostra il prompt “Come ti chiami ?”
- attende input dell’utente e la pressione di invio
- memorizza nella variabile name il valore inserito (se l’utente preme invio viene inserita una stringa vuota).
E’ possibile anche eseguire il cast (trasformazione di tipo) esplicito ad un tipo diverso dalla stringa:
x = int(input("Inserisci l'età: "))
y = float(input("Inserisci la tua media voto: "))Il valore della stringa digitata viene trasformato in intero. Se l’utente non inserisce una stringa numerica, il programma da errore e si interrompe (vedremo come gestire questo errore).
L’istruzione print permette di stampare a terminale stringhe literal (scritte dal programmatore) o valori di variabili di qualsiasi tipo:
print(value) # singolo valore
print(value1, value2, ... ) #sequenza di valoriAd esempio:
print("Mario") # "Mario"
print("Mario", "Rossi") # "Mario Rossi"
print(k) # 3.0 - è stata definita sopra
print("Valore:", x) # "Valore: 4"E’ anche possibile gestire come separare i valori tra loro:
print(value1, ..., sep="[char]")Ad esempio:
print("Mario", "Rossi", sep='-') # "Mario-Rossi"E’ anche possibile stampare stringhe che combinano testo e variabili, con la notazione f-string:
print(f"Ti chiami {name} ed hai {eta} anni.")Notare la f che viene anteposta alla stringa, e l’uso delle parentesi graffe per mostrare una variabile.
Un esempio con variabili, input ed output
base = float(input("Inserisci la base: ")) # Uso float() per accettare decimali
altezza = float(input("Inserisci l'altezza: "))
# 2. Calcolo il risultato
area = (base * altezza) / 2
# 3. Mostro il risultato formattato (print + f-string)
print(f"Risultato: {area}")
Condizioni e cicli
Il flusso del programma, nella programmazione strutturata, è definito da due costrutti fondamentali, condizione e ciclo.
if
Il costrutto if valuta una espressione booleana ed esegue un blocco di istruzioni se vera:
if condition:
istructionsDove condition è qualsiasi condizione bool (altrimenti l’espressione viene automaticamente convertita). Ad esempio:
eta = int(input("Inserisci l'età: "))
if eta >= 18:
print("Sei maggiorenne")
# istruzioni successiveIl comando if verifica la condizione, se vera segue l’istruzione o le istruzioni del blocco, ovvero tutte le istruzioni indentate dopo l’istruzione if. Infine, riprende dall’istruzione successiva. Se invece non è vera, esegue subito la prima istruzione dopo il blocco.
L’istruzione if ha anche una forma più completa:
if condizione1:
# Blocco di codice eseguito se la condizione è vera
print("Condizione soddisfatta")
elif condizione2:
# Blocco eseguito se la prima è falsa ma questa è vera
print("Condizione2 soddisfatta")
else:
# Blocco eseguito se nessuna delle due è vera
print("Nessuna condizione soddisfatta")Vediamolo in dettaglio:
- if indica la prima condizione;
- elif: viene valutata se la prima condizione non è vera. Si possono inserire quanti elif si vogliono;
- else: viene eseguita se nessuna delle condizioni è vera.
Esempio:
voto = float(input("Inserisci voto: ")
if voto >= 9:
print("Ottimo")
elif voto >= 7:
print("Buono")
elif voto >= 6:
print("Sufficiente")
else:
print("Insufficiente")Come si vede le condizioni successive sono valutate solo se le precedenti sono false. Se nessuna condizione è vera, viene eseguito il blocco dopo else.
while
While serve per gestire azioni ripetute, ovvero operazioni cicliche, finché non viene soddisfatta una condizione. Essa ha la seguente forma:
while condition:
istructionsLa sintassi è quindi analoga a quella di if. Queste istruzioni significano “
Qui un esempio:
i = 0
while i < 5:
print(i)
i += 1Questo programma valuta se i<5. Siccome è vera, stampa il valore di i e poi lo incrementa di 1 (i=1). A questo punto verifica di nuovo i<5. Siccome è ancora vera, stampa il valore di i, e poi lo incrementa di 1 (i=2). Procede in questo modo finché i=5. A questo punto la condizione diventa falsa, ed esce da questo ciclo.
La variabile che viene valutata nella condizione viene chiamata variabile sentinella. Naturalmente nelle condizioni più complesse, quindi con operatori and/or/not, si valutano anche più sentinelle in contemporanea.
a = 0
b = 5
c = 10
while a < b and c > b:
print(f'a: {a}, b: {b}, c: {c})
c -= 1
a *= 2Cosa stampa?
E’ anche possibile infine, fare cicli infiniti:
while True:
istructionsUn esempio con if e while
Vediamo un esempio di if e while.
# Programma: Conta i numeri positivi dato un certo numero di inserimenti
conta_positivi = 0 # int
numero_inseriti = 0 # int
limite = int(input("Inserisci il limite: "))
while numero_inseriti < limite:
num = float(input(f"Inserisci il {numero_inseriti + 1}/{limite}-esimo numero: "))
if num > 0:
conta_positivi += 1
numero_inseriti += 1
print(f"\nRisultato: {conta_positivi} numeri positivi su {limite}.")
Conclusioni
In questa lezione abbiamo visto i fondamentali di Python:
- sintassi di base
- variabili, tipi, espressioni
- I/O con print ed input
- Condizione if
- Ciclo while
Con queste istruzioni fondamentali siamo già in grado di scrivere semplici programmi Python che eseguono calcoli, interagiscono con l’utente e svolgono anche operazioni di calcolo ripetute e/o condizionali.
