Números e aritmética

Números aparecem em quase todos os programas que você escreve. Um carrinho de compras totaliza 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 de papel, mais alguns que valem a pena conhecer desde o início.
Os operadores
Os quatro operadores da matemática (+, -, *, /) funcionam exatamente como você esperaria. 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 |
+, -, *, / se comportam como matemática de papel. Os três extras valem a pena aprender desde o início: // divide até um número inteiro, % te dá o resto, e ** eleva a uma potência. Eu uso % muito mais do que jamais esperaria. Divisão: / vs //
/ sempre dá o resultado decimal exato, mesmo que a resposta seja um número inteiro. // cai a parte fracionária e arronda em direção ao infinito negativo. Para números positivos, isso significa cortar o decimal, mas para negativos, ele vai um passo mais longe de zero:
10 / 2 # 5.0 (sempre float, mesmo quando divide evenly)
10 / 3 # 3.3333333333333335
10 // 3 # 3
7 // 2 # 3
-7 // 2 # -4 (arronda em direção ao infinito negativo, não em direção a zero)Você usará principalmente // com números positivos. Guarde o comportamento negativo em mente para quando aparecerem.
/ sempre devolve um decimal, mesmo que divida evenly: 4 / 2 é 2.0. // cai a parte fracionária, mas cuidado com os negativos: -7 // 2 é -4, não -3, porque arronda em vez de chocar. Me pegou na primeira vez que fiz. O operador de resto %
% 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 evenly)
10 % 7 # 3
6 % 2 # 0 (par)
7 % 2 # 1 (ímpar)% é o resto depois da divisão inteira. 10 % 3 é 1 porque 3 cabe em 10 três vezes com 1 sobrando. Você o encontrará principalmente como a verificação de 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 algo diferente 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 única armadilha é o símbolo, use **, não ^, que faz algo não relacionado em Python. Precedência de operador
Python segue a ordem matemática padrão: exponenciação primeiro, depois multiplicação e divisão, depois 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 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ê pega um decimal fora. Quando você precisa um número inteiro, recorra a // ou envolva em int(). Precisão de float
Há uma pegadilha que surpreende quase todo mundo em algum ponto:
0.1 + 0.2 # 0.30000000000000004Aquele pequeno erro 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. É 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 manterá a saída arrumada.
0.1 não têm forma exata de binário, então 0.1 + 0.2 sai como 0.30000000000000004. Não é um bug do Python, toda linguagem faz isso. Para saída cotidiana, round() ou :.2f mantém arrumado. Literais de número legíveis
Python deixa você colocar sublinhados em literais de número para fazer 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, eles estão lá para seus olhos, não o interpretador. Funções integradas úteis
abs()
abs() retorna o valor absoluto: sempre positivo, independentemente do sinal do input. Use-o quando você se importa como longe um número é de zero, não qual direção.
abs(-5) # 5
abs(3.7) # 3.7
abs(-0.5) # 0.5abs() tira o sinal e devolve o tamanho positivo: abs(-5) é 5, abs(3.7) é 3.7. Recorra a ele quando você se importa como longe um número é 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 de 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 sentando exatamente no meio arronda para o número par mais próximo, então round(2.5) é 2, não 3. divmod()
divmod() 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 ao mesmo tempo:
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) devolve o quociente e o resto juntos: divmod(10, 3) é (3, 1). Você pode desempacotar ambos ao mesmo tempo 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 série de casas decimais.

