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. Python oferece operadores aritméticos que funcionam como matemática no papel, mais alguns extras que valem a pena conhecer desde o início.
Os operadores
Os quatro operadores da matemática (+, -, *, /) funcionam exatamente como você espera. Python adiciona três mais 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 |
+, -, *, / funcionam como matemática no papel. Os três extras valem a pena aprender cedo: // divide até um número inteiro, % te dá o resto, e ** eleva a uma potência. Uso % muito mais do que esperava. Divisão: / vs //
/ sempre te dá o resultado decimal exato, mesmo se a resposta é um número inteiro. // descarta a parte fracionária e arredonda em direção ao infinito negativo. Para números positivos significa cortar o decimal, mas para negativos vai um passo mais longe do zero:
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 ao zero)Você vai usar // principalmente com números positivos. Tenha o comportamento negativo em mente para quando eles aparecerem.
/ sempre devolve um decimal, mesmo quando divide exatamente: 4 / 2 é 2.0. // descarta a parte fracionária, mas cuidado com os negativos: -7 // 2 é -4, não -3, porque arredonda em vez de cortar. Me pegou na primeira vez. O operador resto %
% te dá o que sobra depois da 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)% é o que sobra depois da divisão inteira. 10 % 3 é 1 porque 3 cabe em 10 três vezes com 1 sobrando. Você vai conhecê-lo principalmente como o teste par/ímpar: n % 2 é 0 para par, 1 para í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: eleve à potência de 0.5)** eleva um número a uma potência, então 2 ** 10 é 1024. Uma potência fracionária te dá uma raiz: 9 ** 0.5 é 3.0. A armadilha é o símbolo, use **, não ^, que faz algo não relacionado em Python. Precedência de operadores
Python segue a ordem de matemática padrão: exponenciação primeiro, então multiplicação e divisão, então adição e subtração. Quando você não tem certeza, 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
Python tem uma regra consistente: / sempre retorna um decimal, mesmo 4 / 2 dá 2.0. Qualquer operação misturando um inteiro e um decimal também dá um decimal. Quando você precisa 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)/ sempre dá um decimal, então 4 / 2 é 2.0, não 2. Misture um número inteiro com um decimal em qualquer lugar e você recebe um decimal. Quando você precisa de um número inteiro, procure por // ou coloque em int(). Precisão de float
Há uma pegadinha que surpreende quase todo mundo em algum ponto:
0.1 + 0.2 # 0.30000000000000004Esse minúsculo erro não é um bug em Python. Computadores armazenam números decimais em binário, e alguns valores como 0.1 não podem ser representados exatamente. É similar a como 1/3 não pode ser escrito exatamente em decimal. Para a maioria dos cálculos cotidianos não importa. Para exibir dinheiro, round() ou o especificador de formato :.2f vai manter a saída arrumada.
0.1 não têm forma binária exata, então 0.1 + 0.2 sai como 0.30000000000000004. Não é um bug em Python, toda linguagem faz isso. Para saída cotidiana, round() ou :.2f mantém arrumado. Literais numéricos legíveis
Python permite colocar sublinhados em literais numéricos para deixar números grandes mais legíveis. Python os ignora completamente; eles estão lá para você:
population = 8_100_000_000
distance_km = 384_400
pi_approx = 3.141_592_6538_100_000_000 é o mesmo valor que 8100000000. Python os ignora completamente, estão lá para seus olhos, não para o interpretador. Funções embutidas úteis
abs()
abs() retorna o valor absoluto: sempre positivo, independentemente do sinal do input. Use-o quando você se importa com o quão longe um número está de zero, não qual direção.
abs(-5) # 5
abs(3.7) # 3.7
abs(-0.5) # 0.5abs() remove o sinal e devolve o tamanho positivo: abs(-5) é 5, abs(3.7) é 3.7. Use quando você se importa o quão longe um número está de zero, não qual direção se inclina. round()
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. Python arredonda para o número par mais próximo quando um valor está exatamente no meio entre duas opções.
round(x) vai para o número inteiro mais próximo, round(x, n) mantém n casas decimais. A surpresa: um valor exatamente no meio arredonda para o número par mais próximo, então round(2.5) é 2, não 3. divmod()
divmod() te dá tanto o quociente quanto o resto em uma única chamada. Retorna um par de valores, uma tupla (coberta no capítulo Tuplas e conjuntos), 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) # 1divmod(a, b) te devolve o quociente e o resto juntos: divmod(10, 3) é (3, 1). Você pode desempacotar ambos de uma vez com quotient, remainder = divmod(10, 3). 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 parecendo dinheiro em vez de uma longa sequência de casas decimais.

