Conversione dei tipi
Perché convertire i tipi?
Sezione intitolata “Perché convertire i 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.
Conversione automatica (implicita)
Sezione intitolata “Conversione automatica (implicita)”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 = 5decimale = 2.5risultato = intero + decimale
print(risultato) # 7.5print(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.
Conversione manuale (esplicita)
Sezione intitolata “Conversione manuale (esplicita)”Negli altri casi devi chiedere esplicitamente la conversione con funzioni dedicate.
int(): trasforma in numero intero
Sezione intitolata “int(): trasforma in numero intero”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 numeroz = int(True) # 1w = int(False) # 0
print(x, y, z, w) # 3 42 1 0float(): trasforma in numero decimale
Sezione intitolata “float(): trasforma in numero decimale”float() trasforma un valore in un numero decimale:
a = float(5) # 5.0b = float("3.14") # 3.14d = float(True) # 1.0
print(a, b, d) # 5.0 3.14 1.0str(): trasforma in testo
Sezione intitolata “str(): trasforma in testo”Questa conversione è comune quando devi inserire numeri in un messaggio di testo:
eta = 16# print("Ho " + eta + " anni") # ERRORE: non puoi sommare str e intprint("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 = 16print(f"Ho {eta} anni") # "Ho 16 anni": più comodo!bool(): trasforma in vero/falso
Sezione intitolata “bool(): trasforma in vero/falso”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 è falsoprint(bool("")) # False: testo vuoto è falsoprint(bool([])) # False: lista vuota è falsaprint(bool(None)) # False
print(bool(1)) # Trueprint(bool(-5)) # True: qualsiasi numero diverso da zero è veroprint(bool("ciao")) # True: qualsiasi testo non vuoto è veroCosa succede se la conversione non è possibile?
Sezione intitolata “Cosa succede se la conversione non è possibile?”Se il valore non è convertibile, Python solleva un ValueError:
int("ciao") # ValueError: "ciao" non è un numero!float("abc") # ValueErrorPuoi 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!")