Capire i Numeri in Python
Scopri i tre tipi numerici di Python — int, float e complex — con esempi aritmetici, conversioni di tipo, precisione e funzioni matematiche utili.
Python dispone di tre tipi numerici incorporati: interi (int), numeri in virgola mobile (float) e numeri complessi (complex). Questa pagina spiega come funziona ciascun tipo, come eseguire operazioni aritmetiche, le insidie più comuni, la conversione di tipo e le funzioni matematiche fornite dalla libreria standard.
Numeri Interi
Un intero è un numero intero — positivo, negativo o zero — senza punto decimale. In Python, gli interi hanno precisione illimitata: non esiste una dimensione massima fissa come in C o Java. Python gestisce senza problemi numeri con centinaia di cifre.
x = 10
y = -5
z = 0
# Python integers have no fixed size limit
big = 2 ** 100
print(big) # 1267650600228229401496703205376Aritmetica con gli Interi
Si noti che / restituisce sempre un float anche quando il risultato è un numero intero (6 / 2 dà 3.0). Usa // quando hai bisogno di un risultato intero.
Letterali Interi: Binario, Ottale ed Esadecimale
Python accetta letterali interi in quattro basi. Tutti e quattro creano lo stesso oggetto int — il prefisso indica soltanto a Python come interpretare le cifre.
decimal = 255 # base 10 — no prefix
binary = 0b11111111 # base 2 — prefix 0b
octal = 0o377 # base 8 — prefix 0o
hexadecimal = 0xFF # base 16 — prefix 0x
print(decimal, binary, octal, hexadecimal)
# 255 255 255 255
# Convert an int back to a string in a given base
print(hex(255)) # '0xff'
print(bin(255)) # '0b11111111'
print(oct(255)) # '0o377'Verificare il Tipo
Usa type() per confermare il tipo di un valore, o isinstance() per verificare l'appartenenza a un tipo:
print(type(42)) # <class 'int'>
print(isinstance(42, int)) # TrueNumeri Float
Un float è un numero con un punto decimale (o un esponente). I float in Python sono valori a doppia precisione IEEE 754 a 64 bit, che forniscono circa 15–17 cifre decimali significative di precisione.
x = 10.5
y = -5.2
z = 0.0
e = 1.5e3 # scientific notation — same as 1500.0Aritmetica con i Float
Precisione in Virgola Mobile
Poiché i float sono memorizzati in binario, alcune frazioni decimali non possono essere rappresentate esattamente. Questa è una caratteristica dell'aritmetica IEEE 754, non un bug di Python:
print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # FalseQuando è necessaria un'aritmetica decimale esatta (ad esempio nei calcoli finanziari), usa il modulo decimal dalla libreria standard invece di float.
Arrotondamento e Operazioni Utili sui Float
import math
print(round(3.14159, 2)) # 3.14 — round to 2 decimal places
print(math.floor(3.7)) # 3 — largest integer <= value
print(math.ceil(3.2)) # 4 — smallest integer >= value
print(math.sqrt(16)) # 4.0 — square root
print(abs(-7.5)) # 7.5 — absolute valueNumeri Complessi
Un numero complesso ha una parte reale e una parte immaginaria. In Python (seguendo la convenzione ingegneristica) l'unità immaginaria si scrive j o J, non i.
x = 10 + 5j
y = -5 + 3j
z = 0 + 0j # equivalent to complex(0, 0)
w = complex(2, -3) # constructor: real=2, imag=-3Accesso alle Parti Reale e Immaginaria
z = 3 + 4j
print(z.real) # 3.0
print(z.imag) # 4.0
print(abs(z)) # 5.0 — magnitude: sqrt(3^2 + 4^2)Aritmetica con i Numeri Complessi
I numeri complessi non possono essere confrontati con < o > perché non esiste un ordinamento naturale nel piano complesso. Sono supportati solo == e !=.
Conversione di Tipo
Python non promuove silenziosamente i tipi nelle assegnazioni, ma l'aritmetica tra tipi numerici diversi segue regole ben definite:
| Espressione | Tipo risultante |
|---|---|
int + int | int |
int + float | float |
float + complex | complex |
int + complex | complex |
È possibile convertire tra tipi in modo esplicito usando i costruttori incorporati:
# int → float
print(float(42)) # 42.0
# float → int (truncates toward zero, no rounding)
print(int(3.9)) # 3
print(int(-3.9)) # -3
# str → int or float
print(int("100")) # 100
print(float("3.14")) # 3.14
# int → complex
print(complex(5)) # (5+0j)Si noti che convertire un float in int tronca — non arrotonda. Usa prima round() se hai bisogno del comportamento di arrotondamento.
Il Modulo math
Il modulo math fornisce ulteriori funzioni matematiche per i numeri reali.
import math
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
print(math.log(math.e)) # 1.0 — natural log
print(math.log10(1000)) # 3.0
print(math.pow(2, 10)) # 1024.0 — float result (use ** for int result)
print(math.factorial(5)) # 120
print(math.gcd(12, 8)) # 4Per le operazioni sui numeri complessi, usa cmath invece di math:
import cmath
z = 1 + 1j
print(cmath.phase(z)) # 0.7853981633974483 — angle in radians (π/4)
print(cmath.polar(z)) # (1.4142135623730951, 0.7853981633974483) — (r, θ)Quando Usare Ciascun Tipo
| Caso d'uso | Tipo consigliato |
|---|---|
| Conteggio, indicizzazione, operazioni sui bit | int |
| Misurazioni, calcolo scientifico | float |
| Elaborazione dei segnali, ingegneria elettrica | complex |
| Calcoli finanziari che richiedono precisione esatta | decimal.Decimal |
Per argomenti correlati, consulta il capitolo Variabili Python per capire come i numeri vengono memorizzati nelle variabili, il capitolo Operatori Python per l'insieme completo degli operatori numerici, e Casting Python per i dettagli sulla conversione di tipo.