W3docs

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)  # 1267650600228229401496703205376

Aritmetica con gli Interi

python— editable, runs on the server

Si noti che / restituisce sempre un float anche quando il risultato è un numero intero (6 / 23.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)) # True

Numeri 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.0

Aritmetica con i Float

python— editable, runs on the server

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)   # False

Quando è 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 value

Numeri 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=-3

Accesso 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

python— editable, runs on the server

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:

EspressioneTipo risultante
int + intint
int + floatfloat
float + complexcomplex
int + complexcomplex

È 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))  # 4

Per 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'usoTipo consigliato
Conteggio, indicizzazione, operazioni sui bitint
Misurazioni, calcolo scientificofloat
Elaborazione dei segnali, ingegneria elettricacomplex
Calcoli finanziari che richiedono precisione esattadecimal.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.

Pratica

Pratica
Which of the following types of numbers are supported in Python?
Which of the following types of numbers are supported in Python?
Was this page helpful?