Números e aritmética
Números aparecem em quase todo programa que você escreve. Um carrinho de compras soma um preço. Um jogo atualiza uma pontuação. Um script conta quantas vezes algo aconteceu. O Python oferece operadores aritméticos que funcionam como a matemática no papel, mais alguns outros que vale a pena conhecer desde o início.
Os operadores
Os quatro operadores da matemática (+, -, *, /) funcionam exatamente como você esperaria. O Python adiciona mais três que você usará constantemente: divisão inteira, resto e exponenciação.
price = 12.99
quantity = 3
print(price * quantity) # 38.97
print(price + 2) # 14.99
print(price - 1.00) # 11.99| Operador | Nome | Exemplo | Resultado |
|---|---|---|---|
+ | Adição | 5 + 3 | 8 |
- | Subtração | 5 - 3 | 2 |
* | Multiplicação | 5 * 3 | 15 |
/ | Divisão | 5 / 3 | 1.6666... |
// | Divisão inteira | 5 // 3 | 1 |
% | Resto | 5 % 3 | 2 |
** | Exponenciação | 5 ** 3 | 125 |
Divisão: / vs //
/ sempre dá o resultado decimal exato, mesmo se a resposta for um número inteiro. // dá apenas a parte inteira, cortando tudo após a vírgula. Ele não arredonda; ele corta:
10 / 2 # 5.0 (sempre float, mesmo quando divide exatamente)
10 / 3 # 3.3333333333333335
10 // 3 # 3
7 // 2 # 3
-7 // 2 # -4 (arredonda em direção ao infinito negativo, não em direção a zero)O resultado de -7 // 2 surpreende as pessoas. Você usará // principalmente com números positivos, onde isso não aparece. Mantenha no fundo da mente para quando aparecerem negativos.
O operador de resto %
% dá o que sobra após a divisão inteira. Se 10 // 3 é 3 (porque 3 cabe em 10 três vezes), então 10 % 3 é 1 (porque 3 × 3 = 9, e 10 - 9 = 1). O uso mais comum é verificar se um número é par ou ímpar.
10 % 3 # 1
10 % 2 # 0 (divide exatamente)
10 % 7 # 3
6 % 2 # 0 (par)
7 % 2 # 1 (ímpar)Exponenciação **
** eleva um número a uma potência. Use dois asteriscos, não o símbolo ^ (que significa outra coisa em Python):
2 ** 10 # 1024
3 ** 3 # 27
9 ** 0.5 # 3.0 (raiz quadrada: elevar à potência de 0.5)Precedência de operadores
O Python segue a ordem matemática padrão: exponenciação primeiro, depois multiplicação e divisão, depois adição e subtração. Quando estiver em dúvida, use parênteses. Eles deixam a intenção clara e não custam nada:
2 + 3 * 4 # 14, não 20
2 ** 3 + 1 # 9, não 512
10 - 4 / 2 # 8.0, não 3.0
(2 + 3) * 4 # 20
10 / (2 + 3) # 2.0Como int e float interagem
O Python tem uma regra consistente: / sempre retorna um decimal (até 4 / 2 dá 2.0), e qualquer operação misturando um inteiro e um decimal dá um decimal. Quando precisar de um número inteiro, use // ou converta com int().
4 / 2 # 2.0 (float, sempre)
4 // 2 # 2 (int)
4 + 2 # 6 (int)
4 + 2.0 # 6.0 (float)
4 * 0.5 # 2.0 (float)Precisão de float
Há uma pegadinha que surpreende quase todo mundo em algum momento:
0.1 + 0.2 # 0.30000000000000004Esse erro minúsculo não é um bug do Python. Computadores armazenam números decimais em binário, e alguns valores como 0.1 não podem ser representados exatamente. É semelhante a como 1/3 não pode ser escrito exatamente em decimal. Para a maioria dos cálculos do dia a dia, isso não importa. Para exibir dinheiro, round() ou o especificador de formato :.2f manterão a saída arrumada.
Literais numéricos legíveis
O Python permite colocar underscores em literais numéricos para tornar números grandes mais fáceis de ler. O Python os ignora completamente; eles são apenas para você:
population = 8_100_000_000
distance_km = 384_400
pi_approx = 3.141_592_653Funções embutidas úteis
abs()
abs() retorna o valor absoluto: sempre positivo, independentemente do sinal da entrada. Use quando você se importa com a distância de um número até zero, não com a direção.
abs(-5) # 5
abs(3.7) # 3.7
abs(-0.5) # 0.5round()
round() arredonda para o inteiro mais próximo por padrão. Passe um segundo argumento para manter um número específico de casas decimais:
round(3.7) # 4
round(3.2) # 3
round(3.14159, 2) # 3.14Uma coisa que vale a pena saber: round(2.5) dá 2, não 3. O Python arredonda para o número par mais próximo quando um valor está exatamente no meio entre duas opções.
divmod()
divmod() dá tanto o quociente quanto o resto em uma única chamada. Ele retorna um par de valores que você pode atribuir a dois nomes de uma vez:
divmod(10, 3) # (3, 1): quociente 3, resto 1
divmod(7, 2) # (3, 1)
divmod(9, 3) # (3, 0)
quotient, remainder = divmod(10, 3)
print(quotient) # 3
print(remainder) # 1O que é essa coisa (3, 1)?
Isso é uma tupla: um par fixo de valores retornados juntos. Tuplas têm seu próprio capítulo. Por enquanto, separe os dois valores atribuindo a dois nomes de uma vez, como mostrado acima.
Na prática
Uma calculadora de gorjeta:
bill = 45.50
tip_rate = 0.18
tip = round(bill * tip_rate, 2)
total = round(bill + tip, 2)
print(f"Bill: ${bill}")
print(f"Tip: ${tip}")
print(f"Total: ${total}")round() mantém a saída parecida com dinheiro em vez de uma longa sequência de casas decimais.

