Salta ai contenuti
Manuale LogoManuale Logo

Conversione dei tipi

Per stampare "Hai 16 anni", il numero 16 deve comparire dentro una stringa. Se lo concateni al testo senza convertirlo, Python segnala un errore.

Trasformare un valore da un tipo all’altro si chiama conversione di tipo.

In alcuni casi Python converte il tipo automaticamente. Quando sommi un intero e un decimale, per esempio, trasforma l’intero in decimale prima del calcolo.

intero = 5
decimale = 2.5
risultato = intero + decimale
print(risultato) # 7.5
print(type(risultato)) # <class 'float'>

Python applica queste conversioni solo in combinazioni previste dal linguaggio. Non prova invece a indovinare che la stringa "5" debba diventare automaticamente il numero 5.

Negli altri casi devi chiedere esplicitamente la conversione con funzioni dedicate.

int() converte valori di tipo diverso in un numero intero:

x = int(3.9) # 3: la parte decimale viene TAGLIATA (non arrotondata!)
y = int("42") # 42: una stringa numerica diventa un numero
z = int(True) # 1
w = int(False) # 0
print(x, y, z, w) # 3 42 1 0

float() trasforma un valore in un numero decimale:

a = float(5) # 5.0
b = float("3.14") # 3.14
d = float(True) # 1.0
print(a, b, d) # 5.0 3.14 1.0

Questa conversione è comune quando devi inserire numeri in un messaggio di testo:

eta = 16
# print("Ho " + eta + " anni") # ERRORE: non puoi sommare str e int
print("Ho " + str(eta) + " anni") # OK: "Ho 16 anni"
n = str(42) # "42"
f = str(3.14) # "3.14"
b = str(True) # "True"

In alternativa puoi usare le f-string (stringhe formattate), che inseriscono automaticamente il valore nel testo:

eta = 16
print(f"Ho {eta} anni") # "Ho 16 anni": più comodo!

Ogni valore in Python può essere convertito in booleano. I valori “vuoti” o uguali a zero diventano False; gli altri diventano True:

print(bool(0)) # False: zero è falso
print(bool("")) # False: testo vuoto è falso
print(bool([])) # False: lista vuota è falsa
print(bool(None)) # False
print(bool(1)) # True
print(bool(-5)) # True: qualsiasi numero diverso da zero è vero
print(bool("ciao")) # True: qualsiasi testo non vuoto è vero

Se il valore non è convertibile, Python solleva un ValueError:

int("ciao") # ValueError: "ciao" non è un numero!
float("abc") # ValueError

Puoi gestire questo caso con un blocco try/except, descritto in dettaglio nel capitolo sugli errori:

valore_inserito = "pippo"
try:
numero = int(valore_inserito)
print("Numero valido:", numero)
except ValueError:
print("Quello che hai scritto non è un numero!")