In questo articolo vediamo cosa sono I Numeri e le stringhe
- Variabili e valori
- Tipi di Dato in Python
- Nomi delle Variabili
- Costanti
- Commenti
- 🧮 Aritmetica in Python: guida agli operatori e funzioni matematiche
- Esercizi di problem solving
-
🧵 Le Stringhe in Python
- 🚨 Errori di conversione
- Concatenazione di stringhe (“+”)
- Convertire i numeri in stringhe
- 🔤 Stringhe e caratteri
- 📌 Accesso ai caratteri con gli indici
- 🚫 Immutabilità delle stringhe
- ✂️ Porzioni (slicing) di stringa
- 🔠 Caratteri e codici
- 🧩 Funzioni vs Metodi nelle stringhe
- 🔣 Sequenze di escape
- 🌐 Caratteri Unicode
Variabili e valori
In un programma, una variabile è una porzione di memoria associata a un nome. Questo nome consente di accedere e manipolare il valore memorizzato. Le variabili permettono di scrivere programmi flessibili, in grado di trattare valori diversi in momenti diversi dell’esecuzione.

Esistono diversi tipi di valori, ciascuno adatto a rappresentare una specifica tipologia di dato. Tra i più comuni troviamo:
- numeri interi (es.
6
) - numeri con la virgola (es.
24.0
) - stringhe di testo (es.
'Torino'
)
Ad esempio, possiamo definire le seguenti variabili:
base = 6
altezza = 4
area = 24.0
indirizzo = 'Corso Duca Degli Abruzzi'
citta_residenza = 'Torino'
Definizione e assegnazione
Una variabile si definisce assegnandole un valore iniziale mediante l’operatore di assegnazione =
. Ad esempio:
lattine = 4
Con questa istruzione si crea una variabile di nome lattine
e le si assegna il valore 4
. In seguito, lo stesso nome può essere riutilizzato per modificare il contenuto della variabile:
lattine = 7
Questa nuova assegnazione sostituisce il valore precedente. È importante notare che Python, come altri linguaggi interpretati, non richiede di specificare esplicitamente il tipo di variabile: esso viene dedotto dal valore assegnato.
📌 Visualizzare l’esempio volume0.py nella sezione DOWNLOAD
L’istruzione di assegnazione
In Python, per associare un valore a una variabile, si utilizza l’istruzione di assegnazione, rappresentata dal simbolo =
. La sintassi è molto semplice:
nome_variabile = valore
Esempio:
lattine = 4 # definisce la variabile 'lattine' e la inizializza con il valore 4
lattine = 6 # sovrascrive il valore precedente: ora 'lattine' vale 6
L’assegnazione non è un confronto! A differenza della matematica, il simbolo =
in un linguaggio di programmazione non verifica l’uguaglianza tra due valori. Al contrario, indica che il valore a destra deve essere memorizzato nella variabile a sinistra.
Per esempio, l’istruzione:
x = 3 + 4
fa sì che x
prenda il valore calcolato dall’espressione 3 + 4
, cioè 7
.
Nota: l’operatore di confronto di uguaglianza in Python è ==
e verrà trattato nel capitolo dedicato alle espressioni logiche e ai confronti.
Un esempio: acquisto di una soda
Supponiamo di voler confrontare due diverse confezioni di bevande analcoliche per capire quale sia più conveniente:
- Confezione A: 6 lattine da 12 once ciascuna
- Confezione B: 1 bottiglia da 2 litri
Vogliamo calcolare il volume totale in litri offerto dalla confezione di lattine per confrontarlo con quello della bottiglia.
Poiché 12 once fluide equivalgono a circa 0,355 litri, possiamo impostare un semplice programma Python che effettui questo calcolo.
cansPerPack = 6
ouncesPerCan = 12
literPerOunce = 0.0296
totalLiters = cansPerPack * ouncesPerCan * literPerOunce
print("Volume totale (in litri):", totalLiters)
In questo esempio:
-
cansPerPack
eouncesPerCan
sono numeri interi (int), -
literPerOunce
è un numero decimale (float), -
totalLiters
conterrà un valore float risultante dal prodotto.
Tipi di dato in Python
Python gestisce automaticamente diversi tipi di dato associati ai valori, non alle variabili. I principali tipi che abbiamo incontrato sono:
-
Numeri interi (int) – es.
7
-
Numeri decimali (float) – es.
8.88
-
Stringhe (str) – es.
"Bob"
Quando assegniamo un valore a una variabile, Python determina il tipo in base al contenuto.
cansPerPack = 6 # int
canVolume = 12.0 # float
name = "Alice" # string
Aggiornare una variabile
In Python, è possibile modificare il valore di una variabile già definita semplicemente assegnandole un nuovo valore:
cansPerPack = 6
cansPerPack = 8 # ora cansPerPack vale 8
Se vogliamo aggiornare una variabile in base al suo valore attuale:
cansPerPack = cansPerPack + 2
Questo significa:
- Leggi il valore attuale di
cansPerPack
- Aggiungi
2
- Assegna il nuovo valore alla stessa variabile
Attenzione: variabili non definite
Una variabile deve essere definita prima di essere utilizzata. In caso contrario, si otterrà un errore di tipo NameError
.
Esempio errato
canVolume = 12 * literPerOunce # ERRORE: 'literPerOunce' non è ancora definita
literPerOunce = 0.0296
Ordine corretto:
literPerOunce = 0.0296
canVolume = 12 * literPerOunce # Funziona correttamente
Python esegue il codice riga per riga, quindi le variabili devono essere inizializzate prima del loro utilizzo.
Tipi di Dato in Python
Il tipo è associato al valore, non alla variabile
In Python, il tipo di dato (intero, decimale, stringa, ecc.) non è fissato alla variabile, ma al valore che viene assegnato. Questo significa che una stessa variabile può contenere valori di tipo diverso in momenti differenti dell’esecuzione.
Esempio
taxRate = 5 # int
taxRate = 5.5 # float
taxRate = "Non-taxable" # string
Nel frammento sopra, la variabile taxRate
viene inizialmente associata a un numero intero, poi a un numero decimale, infine a una stringa. Python permette questo comportamento, ma occorre fare molta attenzione, perché usare una variabile con un tipo inaspettato può causare errori.
Esempio pratico
# Testing different types in the same variable
taxRate = 5 # int
print(taxRate)
taxRate = 5.5 # float
print(taxRate)
taxRate = "Non-taxable" # string
print(taxRate)
Questo codice funzionerà correttamente e stamperà:
5
5.5
Non-taxable
Attenzione alla sensibilità al maiuscolo/minuscolo
Python distingue tra taxRate
e taxrate
: sono variabili diverse. Questo è un errore comune per i principianti.
Esempio errato
taxRate = 5 # int
print(taxRate)
taxrate = 5.5 # float, ma è una nuova variabile!
print(taxRate) # stampa ancora 5, non 5.5
taxRate = "Non-taxable"
print(taxRate)
Output:
5
5
Non-taxable
Nel codice sopra, la riga taxrate = 5.5
non modifica la variabile taxRate
, poiché il nome è scritto in modo diverso (r
minuscola). Python è case-sensitive: distingue tra lettere maiuscole e minuscole.
Operazioni non valide tra tipi diversi
È importante ricordare che non si possono combinare direttamente valori di tipo diverso. Ad esempio, non è possibile sommare una stringa a un numero:
taxRate = "Non-taxable"
print(taxRate + 5) # Errore!
Questo codice genererà l’errore:
TypeError: can only concatenate str (not "int") to str
Se invece concateno due stringhe:
print(taxRate + "??")
Otterrò:
Non-taxable??
Buone pratiche
Quando si lavora con le variabili:
- Ricordarsi sempre il tipo di dato attuale associato a ciascuna variabile.
- Evitare di riassegnare alla stessa variabile valori di tipo molto diverso, a meno che non sia strettamente necessario.
- Usare l’operatore
+
solo tra valori compatibili (ad esempio due numeri, oppure due stringhe).
Nomi delle Variabili
In Python, i nomi delle variabili devono rispettare precise regole sintattiche e convenzioni stilistiche:
Regole sintattiche
- Devono iniziare con una lettera (A–Z, a–z) oppure con il simbolo di underscore (
_
). - Possono contenere lettere, numeri e underscore dopo il primo carattere.
-
Non possono contenere spazi né simboli speciali come
?
,%
,@
, ecc. - Non devono coincidere con le parole riservate del linguaggio (come
if
,while
,class
, ecc.).
Convenzioni di stile
-
Preferibile l’uso della convenzione
snake_case
(parole separate da underscore):
Esempio:can_volume
,total_price
. - Alternativamente, si può usare la notazione
camelCase
:
Esempio:canVolume
,totalPrice
. - Le costanti (valori che non dovrebbero cambiare) si scrivono in maiuscolo:
Esempio:MAX_SIZE
,BOTTLE_VOLUME
.
Nomi descrittivi
È fortemente consigliato usare nomi chiari e descrittivi, che rendano comprensibile il significato della variabile.
Esempio
canVolume = 0.35 # chiaro
cv = 0.355 # poco chiaro
In programmi collaborativi (scritti da più persone), usare nomi descrittivi migliora la leggibilità e la manutenibilità del codice.
Costanti
In Python, non esistono costanti vere e proprie: una variabile può sempre essere modificata. Tuttavia, è buona pratica considerare alcune variabili come costanti, non cambiandone mai il valore dopo l’inizializzazione.
Convenzione
- Scrivere i nomi delle costanti in maiuscolo.
- Usare underscore per separare le parole.
Esempio
BOTTLE_VOLUME = 2.0
MAX_SIZE = 100
Usare costanti rende il codice più leggibile:
totalVolume = bottles * 2 # meno chiaro
totalVolume = bottles * BOTTLE_VOLUME # più chiaro
Sebbene Python consenta tecnicamente la modifica delle costanti, non è raccomandato farlo.
Commenti
I commenti sono parti del codice che non vengono eseguite, ma servono per fornire spiegazioni.
- Si scrivono anteponendo il simbolo
#
alla riga. - Servono a chiarire il funzionamento del codice per:
- Altri programmatori.
- Se stessi in un momento futuro.
Esempio
# Calcola il volume totale in litri
totalVolume = bottles * BOTTLE_VOLUME
Buona prassi
- Iniziare ogni script con un commento descrittivo.
- Commentare blocchi di codice complessi o poco immediati.
- Evitare di commentare ogni singola riga banale.
📌 Citazione utile:
“Documentation is a love letter that you write to your future self.”
— Damian Conway, Perl Best Practices, O’Reilly, 2005
📌 Visualizzare l’esempio volume1.py nella sezione DOWNLOAD
🧮 Aritmetica in Python: guida agli operatori e funzioni matematiche
Python è un linguaggio semplice e potente, che offre strumenti immediati per eseguire operazioni aritmetiche. In questa guida vedremo gli operatori aritmetici fondamentali, il comportamento dei tipi numerici, come gestire divisioni, moduli, e l’uso delle librerie matematiche più comuni.
🔢 Operatori aritmetici di base
Python supporta tutti gli operatori aritmetici elementari:
Operazione | Operatore | Esempio | Risultato |
---|---|---|---|
Addizione | + | 5 + 2 | 7 |
Sottrazione | - | 5 - 2 | 3 |
Moltiplicazione | * | 5 * 2 | 10 |
Divisione | / | 5 / 2 | 2.5 |
Potenza | ** | 2 ** 3 | 8 |
➕ Uso delle parentesi
Come in algebra, le parentesi modificano la precedenza delle operazioni. È importante usarle per evitare ambiguità:
b * ((1 + r / 100) ** n)
La regola di precedenza in Python segue il principio PEMDAS:
- Parentesi
- Esponenziazione
- MD Moltiplicazione/Divisione (da sinistra a destra)
- AS Addizione/Sottrazione (da sinistra a destra)
📐 Tipi numerici: interi e float
Python distingue tra interi (int
) e numeri a virgola mobile (float
).
- Se combini interi e float in un’espressione, il risultato sarà un
float
.
7 + 4.0 # Risultato: 11.0
⚠️ Attenzione:
4
e4.0
sono considerati di tipo diverso!
Non puoi eseguire operazioni aritmetiche tra numeri e stringhe:
"7" + 4 # Errore!
➗ Divisioni: intere e con resto
Divisione intera //
Questo operatore restituisce il quoziente intero, ignorando la parte decimale:
7 // 4 # Risultato: 1
Operatore modulo %
Restituisce il resto della divisione tra interi:
7 % 4 # Risultato: 3
🔍 Tabella esempi
Espressione | Risultato // | Risultato % |
---|---|---|
7 // 4 | 1 | 3 |
9 // 2 | 4 | 1 |
10 % 3 | 3 | 1 |
📌 Visualizzare l’esempio pennies.py nella sezione DOWNLOAD
📣 Invocare funzioni in Python
Una funzione è un blocco di codice che esegue un compito specifico. Le funzioni in Python si invocano tramite il loro nome, seguito da parentesi:
print("Hello!") # Stampa un messaggio
abs(-173) # Restituisce 173
distance = abs(x) # Salva il risultato in una variabile
🧠 Funzioni matematiche predefinite
Python include alcune funzioni built-in, sempre disponibili, e altre che si trovano nella libreria standard math
.
📋 Funzioni built-in (senza import)
Funzione | Descrizione |
---|---|
abs(x) | Valore assoluto di x |
round(x, d) | Arrotonda x a d decimali |
int(x) | Converte x a intero (troncamento) |
float(x) | Converte x a numero a virgola mobile |
📚 Libreria math
: funzioni avanzate
Per usare le funzioni del modulo math
, devi importarlo:
from math import sqrt, floor, ceil
Oppure:
import math
x = math.sqrt(16)
📋 Funzioni del modulo math
Funzione | Descrizione |
---|---|
math.sqrt(x) | Radice quadrata di x |
math.floor(x) | Approssimazione per difetto |
math.ceil(x) | Approssimazione per eccesso |
math.trunc(x) | Troncamento verso zero |
math.isclose(a, b) | Confronta due valori con una certa tolleranza |
🔗 Documentazione: math — Mathematical functions
🔄 Conversioni numeriche
Puoi convertire esplicitamente tra tipi numerici:
float(4) # Risultato: 4.0
int(4.9) # Risultato: 4 (troncamento, non arrotondamento)
⚠️ Errori di arrotondamento
I numeri in virgola mobile non sono sempre precisi:
price = 4.35
quantity = 100
print(price * quantity) # Stampa: 434.99999999999994
Come gestire:
- Usa
round()
- Confronta con
math.isclose()
- Mostra un numero fisso di cifre decimali
✅ Buone pratiche di scrittura
Utilizza spazi nelle espressioni per migliorarne la leggibilità:
totalCans = fullCans + emptyCans
Controlla sempre il bilanciamento delle parentesi:
# Errato:
((a + b) * t / 2 * (1 - t)
# Corretto:
((a + b) * t) / (2 * (1 - t))
Esercizi di problem
solving
Problem solving: prima lo si fa a mano
- Un passo importantissimo dello sviluppo di un algoritmo è eseguire «a mano» l’elaborazione prevista.
- Se non si è in grado di risolverlo a mano, difficilmente si riuscirà a scrivere il programma
- Esempio di problema:
- Bisogna posizionare lungo il muro una fila di piastrelle nere e bianche. Per ragioni estetiche l’architetto ha specificato che la prima e l’ultima piastrella devono essere nere. Il vostro compito è calcolare il numero di piastrelle necessarie e il vuoto a ciascuna delle due estremità della riga, dato lo spazio disponibile e la larghezza di ogni piastrella.

Iniziare con valori d’esempio
- Dati
- Larghezza totale: 100 pollici
- Larghezza di una piastrella: 5 pollici
- Testare i valori
- Vediamo… 100/5 = 20, perfetto! 20 piastrelle. Niente spazio vuoto.
- Però… BN…BN «… la prima e l’ultima piastrella dovrebbero essere nere.»
- Bisogna guardare con più attenzione al problema…
- Iniziando con una nera, poi con coppie BN

- Osservazione: ogni coppia è 2 volte la larghezza di 1 piastrella
- In questo esempio, 2 x 5 = 10 pollici
Continuare ad applicare la soluzione
- Larghezza totale: 100 pollici
- Larghezza di una piastrella: 5 pollici
- Calcolare la larghezza totale di tutte le piastrelle
- Una piastrella nera: 5 pollici
- 9 coppie di BN: 90 pollici
- Larghezza totale: 95 pollici
- Calcolare gli spazi (uno a ciascuna estremità)
- 100 – 95 = 5 pollici = spazio totale
- Spazio di 5 pollici / 2 = 2.5 pollici a ciascuna estremità
Traduzione in algoritmo
- Usare l’esempio per capire come vadano eseguiti i calcoli
- Quante coppie di piastrelle B e N?
- Notare: deve essere un numero intero
- Parte intera di: (larghezza totale – larghezza piastrella) / ( 2 * larghezza piastrella)
- Quante piastrelle?
- 1 + 2 x numero di coppie
- Spazio a ciascuna estremità
- (larghezza totale – numero di piastrelle * larghezza piastrella) / 2
L’algoritmo
- Calcolare il numero di coppie di piastrelle
- Numero di coppie = parte intera di (larghezza totale – larghezza piastrella) / (2 * larghezza piastrella)
- Calcolare il numero di piastrelle
- Numero di piastrelle = 1 + (2 * numero di coppie)
- Calcolare lo spazio
- Spazio ad ogni estremità = (larghezza totale – numero di piastrelle*larghezza piastrella ) / 2
- Visualizzare il numero di coppie di piastrelle
- Visualizzare il numero di piastrelle totale in una riga
- Visualizzare lo spazio vuoto
📌 Visualizzare l’esempio pennies.py nella sezione DOWNLOAD
🧵 Le Stringhe in Python
Le stringhe sono uno dei tipi fondamentali in Python. In questa guida vedremo come funzionano, come manipolarle, come trattare i singoli caratteri e cosa sono le sequenze di escape.
🚨 Errori di conversione
Quando si cerca di convertire una stringa in numero, è necessario che la stringa rappresenti correttamente un numero.
val = int("ciao") # Errore!
Errore generato:
ValueError: invalid literal for int() with base 10: 'ciao'
Concatenazione di stringhe (“+”)
- Si può ‘aggiungere’ una stringa alla fine di un’altra
- firstName = “Harry”
- lastName = “Morgan”
- name = firstName + lastName # HarryMorgan
- print(“my name is:”, name)
- Si vuole aggiungere uno spazio tra le due stringhe?
- name = firstName + ” ” + lastName # Harry Morgan
Convertire i numeri in stringhe
- Si usa la funzione str() per convertire da numeri a stringhe
balance = 888.88
dollars = 888
balanceAsString = str(balance)
dollarsAsString = str(dollars)
print(balanceAsString)
print(dollarsAsString)
🔤 Stringhe e caratteri
- Le stringhe sono sequenze immutabili di caratteri.
- Una volta create, non possono essere modificate direttamente.
name = "Harry"
📌 Accesso ai caratteri con gli indici
Ogni carattere ha un indice numerico che parte da 0.
name = "Harry"
first = name[0] # 'H'
last = name[4] # 'y'
📛 Un indice non valido genera un errore:
name = "Bob"
print(name[3]) # IndexError: string index out of range
🚫 Immutabilità delle stringhe
Non è possibile modificare un carattere di una stringa direttamente:
name = "Bob"
name[0] = "G" # TypeError: 'str' object does not support item assignment
✅ Soluzione: creare una nuova stringa combinando porzioni della vecchia.
✂️ Porzioni (slicing) di stringa
Sintassi base:
stringa[inizio:fine]
L’indice inizio è incluso.
L’indice fine è escluso.
nome = "Paperon de' Paperoni"
porzione = nome[4:10] # "ron de"
Estensioni dello slicing
nome[:6] # Dal primo al 6° carattere (escluso)
nome[6:] # Dal 6° carattere alla fine
nome[:] # L’intera stringa (una copia)
nome[::2] # Tutti i caratteri con indice pari
nome[::-1] # Stringa invertita
📊 Tabella riassuntiva operazioni su stringhe
Operazione | Sintassi | Esempio | Risultato |
---|---|---|---|
Accesso carattere | s[i] | "Python"[0] | 'P' |
Lunghezza | len(s) | len("abc") | 3 |
Slice semplice | s[2:5] | "abcdefgh"[2:5] | 'cde' |
Slice con step | s[::2] | "abcdef"[::2] | 'ace' |
Inversione | s[::-1] | "hello"[::-1] | 'olleh' |

🔠 Caratteri e codici
Python usa la codifica Unicode, che include il set ASCII:
Carattere | Codice ASCII |
---|---|
A | 65 |
a | 97 |
0 | 48 |
H | 72 |

🔗 Risorse: Unicode charts
🧩 Funzioni vs Metodi nelle stringhe
Differenze principali
Caratteristica | Funzioni | Metodi |
---|---|---|
Sintassi | funzione(argomento) | oggetto.metodo() |
Ambito | Generali | Specifici per ogni tipo di oggetto |
Esempio | len("ciao") | "ciao".upper() |
🧰 Metodi utili per le stringhe
Metodo | Descrizione | Esempio |
---|---|---|
upper() | Tutto maiuscolo |
"ciao".upper() → 'CIAO' |
lower() | Tutto minuscolo |
"CIAO".lower() → 'ciao' |
strip() | Rimuove spazi iniziali/finali |
" ciao ".strip() → 'ciao' |
replace(a, b) | Sostituisce a con b |
"ciao".replace("a", "e") → 'cieo' |
find(sub) | Restituisce l’indice della prima occorrenza |
"ciao".find("a") → 2 |
split() | Divide la stringa in una lista |
"a,b,c".split(",") → ['a','b','c'] |
🔣 Sequenze di escape
Sequenza | Significato | Esempio | Risultato |
---|---|---|---|
\\ | Backslash | "C:\\Path" | C:\Path |
\' | Apostrofo | 'L\'uomo' | L'uomo |
\" | Virgoletta doppia | "He said \"Hello\"" | He said "Hello" |
\n | A capo | "A\nB\nC" | Testo su più righe |
\t | Tabulazione | "A\tB" | A B |
🌐 Caratteri Unicode
Python permette di rappresentare caratteri Unicode tramite:
- Codici brevi:
'\u265e' # ♞
'\u2620' # ☠
- Codici lunghi:
'\U0001F600' # 😀
- Oppure direttamente:
simbolo = '♞'
print(simbolo) # ♞
Lascia un commento