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 = 4Con 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 = 7Questa 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 6L’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:
cansPerPackeouncesPerCansono numeri interi (int),literPerOunceè un numero decimale (float),totalLitersconterrà 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" # stringAggiornare 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 8Se vogliamo aggiornare una variabile in base al suo valore attuale:
cansPerPack = cansPerPack + 2Questo 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.0296Ordine corretto:
literPerOunce = 0.0296
canVolume = 12 * literPerOunce # Funziona correttamentePython 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" # stringNel 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 chiaroIn 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 = 100Usare costanti rende il codice più leggibile:
totalVolume = bottles * 2 # meno chiaro
totalVolume = bottles * BOTTLE_VOLUME # più chiaroSebbene 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_VOLUMEBuona 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:
4e4.0sono 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: 1Operatore 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, ceilOppure:
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.99999999999994Come 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 + emptyCansControlla 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) # ♞