Python ha tre diversi tipi di numeri predefiniti: i numeri interi (int), i numeri in virgola mobile (float) e i numeri complessi (complex).
Anche le frazioni (fractions.Fraction) e i numeri decimali (decimal.Decimal) sono disponibili importandoli dalla libreria standard.
Anche i numeri interi, compresi quelli esadecimali (hex()), ottali (oct()) e binari (bin()) senza cifre decimali, sono identificati come ints:
# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>
>>> -12
-12
I numeri che contengono un punto decimale (con o senza parte frazionaria) sono identificati come floats:
>>> 3.45
3.45
>>> type(3.45)
<class 'float'>
Python supporta pienamente l'aritmetica tra questi diversi tipi di numeri e, quando vengono usati con gli operatori aritmetici binari (+, -, *, /, // e %), converte i numeri di tipo più ristretto per adattarli alle loro controparti di tipo più ampio.
Tutti i numeri (tranne quelli complessi) supportano tutte le operazioni aritmetiche, valutate secondo la precedenza degli operatori.
Il supporto per le funzioni matematiche (oltre a + e -) applicate ai numeri complessi si trova nel modulo cmath.
Gli operatori di addizione e sottrazione si comportano come nella matematica normale.
Se uno o più operandi sono di tipo float, anche gli int rimanenti verranno convertiti in float:
>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0
Come per l'addizione e la sottrazione, anche la moltiplicazione converte i numeri di tipo più ristretto per adattarli alle controparti di tipo più ampio:
>>> 3 * 2
6
>>> 3 * 2.0
6.0
La divisione restituisce sempre un float, anche se il risultato è un numero intero:
>>> 6/5
1.2
>>> 6/2
3.0
Se serve un risultato di tipo int, puoi usare la divisione intera per troncare il risultato.
La divisione intera si esegue con l'operatore //:
>>> 6//5
1
>>> 6//2
3
L'operatore modulo (%) restituisce il resto della divisione tra i due operandi:
# The result of % is zero here, because dividing 8 by 2 leaves no remainder
>>> 8 % 2
0
# The result of % is 2 here, because 3 only goes into 5 once, with 2 left over
>>> 5 % 3
2
Un altro modo per vedere 5 % 3:
>>> whole_part = int(5/3)
1
>>> decimal_part = 5/3 - whole_part
0.6666666666666667
>>> whole_remainder = decimal_part * 3
2.0
L'elevamento a potenza si esegue con l'operatore **:
>>> 2 ** 3
8
>>> 4 ** 0.5
2
I numeri possono essere convertiti da int a float e da float a int usando le funzioni predefinite int() e float():
>>> int(3.45)
3
>>> float(3)
3.0
Python mette a disposizione una funzione predefinita round(<number>, <decimal_places>) per arrotondare un numero in virgola mobile a un dato numero di cifre decimali.
Se non viene specificato il numero di cifre decimali, il numero viene arrotondato all'intero più vicino e viene restituito un int:
>>> round(3.1415926535, 2)
3.14
>>> round(3.1415926535)
3
Python permette di usare le parentesi per raggruppare le espressioni. È utile quando vuoi sovrascrivere l'ordine predefinito delle operazioni.
>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20
Python segue la regola PEMDAS per la precedenza degli operatori.
Questo significa che i calcoli all'interno delle () hanno la priorità più alta, seguiti da **, poi *, /, //, %, + e -:
>>> 2 + 3 - 4 * 4
-11
>>> (2 + 3 - 4) * 4
4
# In the following example, the `**` operator has the highest priority, then `*`, then `+`
# Meaning we first do 4 ** 4, then 3 * 256, then 2 + 768
>>> 2 + 3 * 4 ** 4
770
I numeri interi in Python hanno precisione arbitraria: il numero di cifre è limitato solo dalla memoria disponibile del sistema host.
I numeri in virgola mobile sono di solito implementati usando un double in C (15 cifre decimali di precisione), ma la loro rappresentazione varia a seconda del sistema host.
I numeri complessi hanno una parte real e una parte imaginary, entrambe rappresentate da numeri in virgola mobile.
Per una discussione più dettagliata dei problemi e dei limiti dell'aritmetica in virgola mobile nei vari linguaggi di programmazione, dai un'occhiata a 0.30000000000000004.com e a Il tutorial di Python.