Python tem três tipos diferentes de números embutidos: inteiros (int), números de ponto flutuante (float) e complexos (complex).
Fractions (fractions.Fraction) e Decimals (decimal.Decimal) também estão disponíveis por meio de importação da biblioteca padrão.
Números inteiros, incluindo números hexadecimais (hex()), octais (oct()) e binários (bin()) sem casas decimais, também são identificados como ints:
# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>
>>> -12
-12
Números que contêm um ponto decimal (com ou sem parte fracionária) são identificados como floats:
>>> 3.45
3.45
>>> type(3.45)
<class 'float'>
Python dá suporte total à aritmética entre esses diferentes tipos de número e converte números mais estreitos para corresponder às suas contrapartes menos estreitas quando eles são usados com os operadores aritméticos binários (+, -, *, /, // e %).
Todos os números (exceto os complexos) dão suporte a todas as operações aritméticas, avaliadas de acordo com a precedência de operadores.
O suporte a funções matemáticas (além de + e -) para números complexos pode ser encontrado no módulo cmath.
Os operadores de adição e subtração se comportam como na matemática normal.
Se um ou mais operandos for um float, os demais ints também serão convertidos para floats:
>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0
Assim como na adição e na subtração, a multiplicação converte números mais estreitos para corresponder às suas contrapartes menos estreitas:
>>> 3 * 2
6
>>> 3 * 2.0
6.0
A divisão sempre retorna um float, mesmo que o resultado seja um número inteiro:
>>> 6/5
1.2
>>> 6/2
3.0
Se você precisar de um resultado int, pode usar a divisão inteira para truncar o resultado.
A divisão inteira é feita com o operador //:
>>> 6//5
1
>>> 6//2
3
O operador de módulo (%) retorna o resto da divisão dos dois operandos:
# 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
Outra forma de ver 5 % 3:
>>> whole_part = int(5/3)
1
>>> decimal_part = 5/3 - whole_part
0.6666666666666667
>>> whole_remainder = decimal_part * 3
2.0
A exponenciação é feita com o operador **:
>>> 2 ** 3
8
>>> 4 ** 0.5
2
Números podem ser convertidos de int para floats e de floats para int usando as funções embutidas int() e float():
>>> int(3.45)
3
>>> float(3)
3.0
Python oferece uma função embutida round(<number>, <decimal_places>) para arredondar um número de ponto flutuante para um determinado número de casas decimais.
Se nenhum número de casas decimais for especificado, o número é arredondado para o inteiro mais próximo e retorna um int:
>>> round(3.1415926535, 2)
3.14
>>> round(3.1415926535)
3
Python permite que você use parênteses para agrupar expressões. Isso é útil quando você quer substituir a ordem padrão das operações.
>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20
Python segue a regra PEMDAS para precedência de operadores.
Isso significa que os cálculos dentro de () têm a prioridade mais alta, seguidos por **, depois *, /, //, %, + 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
Os inteiros em Python têm precisão arbitrária: o número de dígitos é limitado apenas pela memória disponível do sistema hospedeiro.
Números de ponto flutuante geralmente são implementados usando um double em C (15 casas decimais de precisão), mas a representação varia conforme o sistema hospedeiro.
Números complexos têm uma parte real e uma parte imaginary, ambas representadas por números de ponto flutuante.
Para uma discussão mais detalhada dos problemas e limitações da aritmética de ponto flutuante entre linguagens de programação, dê uma olhada em 0.30000000000000004.com e em The Python Tutorial.