Python Operadores Aritméticos
O Python é uma calculadora poderosa. Soma, subtração, multiplicação e divisão funcionam como você aprendeu na escola, com alguns sinais diferentes dos do caderno: o "vezes" é *, e não × nem x. Além disso, o Python tem três operações que a calculadora comum não tem num botão só: a divisão inteira (//), o resto (%) e a potência (**). Nesta aula você vai conhecer os sete operadores aritméticos, ver o que eles fazem com números negativos e o que acontece quando alguém tenta dividir por zero.
- Os sete operadores:
+,-,*,/,//,%e**. - A diferença entre
/(divisão "de verdade") e//(divisão inteira). - A usar o resto
%para descobrir sobras, pares e ímpares. - A potência
**, e a raiz quadrada com** 0.5. - Por que
-7 // 2dá-4, e não-3. - Qual conta o Python faz primeiro, e como os parênteses mudam isso.
- Os erros reais: divisão por zero, o
xno lugar do*, o^que não é potência.
Os programas desta aula rodaram no Python 3.14 da máquina da Ana (usuária ana, computador notebook), e podem ser repetidos no editor do guia.
A ideia: as teclas da calculadora
Um operador é um sinal que faz uma operação com os valores que estão em volta dele. Em 7 + 2, o + é o operador, e o 7 e o 2 são os operandos (os valores que entram na conta). O resultado, 9, é um valor novo, que você pode mostrar ou guardar numa variável.
| Operador | Nome | Exemplo | Resultado | No caderno |
|---|---|---|---|---|
+ | Soma | 7 + 2 | 9 | 7 + 2 |
- | Subtração | 7 - 2 | 5 | 7 − 2 |
* | Multiplicação | 7 * 2 | 14 | 7 × 2 |
/ | Divisão | 7 / 2 | 3.5 | 7 ÷ 2 |
// | Divisão inteira | 7 // 2 | 3 | O quociente da "conta armada" |
% | Resto | 7 % 2 | 1 | O resto da "conta armada" |
** | Potência | 7 ** 2 | 49 | 7² |
print(7 + 2) print(7 - 2) print(7 * 2) print(7 / 2) print(7 // 2) print(7 % 2) print(7 ** 2)
$ python3 contas.py 9 5 14 3.5 3 1 49
7+2 e 7 + 2 dão o mesmo resultado, mas o costume em Python é deixar um espaço de cada lado do operador. A conta fica mais fácil de ler, e é o que o guia de estilo oficial recomenda (aula PEP 8).
1. Soma, subtração e multiplicação
As três primeiras funcionam como na escola. A única novidade é o asterisco * para multiplicar: o x é uma letra (poderia ser o nome de uma variável), e o × nem existe no teclado. Lembre também da regra da aula Números: se um dos números for float, o resultado é float.
paes = 12 preco = 0.75 print(paes * preco) print(paes - 5) print(paes + 8)
$ python3 padaria.py 9.0 7 20
O + e o * também funcionam com textos, mas com outro sentido: "pão" + "zinho" junta (dá 'pãozinho') e "ha" * 3 repete (dá 'hahaha'). Isso é assunto da aula Juntar e Repetir Textos.
2. Dois tipos de divisão: / e //
O Python tem duas divisões, e é importante saber qual usar.
A divisão /: o resultado "de verdade"
Com uma barra, o Python faz a divisão completa, com as casas decimais. O resultado é sempre float, mesmo quando a conta é exata:
$ python3 -q >>> 7 / 2 3.5 >>> 6 / 3 2.0 >>> 1 / 3 0.3333333333333333 >>> 2 / 3 0.6666666666666666
6 / 3 deu 2.0, com o .0: é float. E as dízimas param em uns 16 algarismos (o limite do float).
A divisão inteira //: quantas vezes cabe
Com duas barras, o Python responde: "quantas vezes o segundo número cabe inteiro no primeiro?". É o quociente da conta armada da escola, sem as casas decimais. A Ana tem 20 pães e quer colocá-los em caixas de 6:
paes = 20
por_caixa = 6
caixas = paes // por_caixa
sobra = paes % por_caixa
print("Caixas cheias:", caixas)
print("Pães que sobram:", sobra)
$ python3 caixas.py Caixas cheias: 3 Pães que sobram: 2
- paes // por_caixa
- 20 dividido por 6 dá 3,33…; a divisão inteira fica só com o 3: três caixas cheias.
- paes % por_caixa
- O resto: depois de encher 3 caixas (18 pães), sobram 2. Você vai ver o
%na próxima seção.
Pense na conta armada: 20 ÷ 6 = 3, resto 2. O // dá o 3 e o % dá o 2. Com int dos dois lados, o resultado do // é int; com um float na conta, ele continua sendo "o número inteiro de vezes", mas escrito como float: 7.0 // 2 dá 3.0.
Missão: agora são 50 pães em caixas de 6. O programa mostra Caixas: 8.333333333333333, que não serve (não existe um terço de caixa), e a sobra está zerada. Use a divisão inteira para as caixas e o resto para a sobra.
paes = 50
caixas = paes / 6
sobra = 0
print("Caixas:", caixas)
print("Sobram:", sobra)
paes = 50
caixas = paes // 6
sobra = paes % 6
print("Caixas:", caixas)
print("Sobram:", sobra)
3. O resto: %
O % (que no Python não tem nada a ver com porcentagem!) dá o resto da divisão. Ele parece pouca coisa, mas resolve muitos problemas do dia a dia:
$ python3 -q >>> 15 % 2 1 >>> 14 % 2 0 >>> 7.5 % 2 1.5
| Pergunta | Conta | Como ler o resultado |
|---|---|---|
| O número é par? | numero % 2 | 0: par. 1: ímpar |
| Quanto sobra depois de encher as caixas? | paes % 6 | Os pães fora das caixas |
| Um número é múltiplo de outro? | ano % 4 | 0: é múltiplo (divide certinho) |
| Quantos minutos sobram depois das horas cheias? | 135 % 60 | 15 (135 minutos = 2 h e 15 min) |
Quando você quer as duas coisas de uma vez, o quociente e o resto, existe a função divmod(), que devolve os dois juntos: divmod(20, 6) dá (3, 2).
4. A potência: **
Dois asteriscos querem dizer "elevado a": 7 ** 2 é 7², sete ao quadrado, 49. O expoente também pode ser decimal ou negativo:
$ python3 -q >>> 9 ** 0.5 3.0 >>> 2 ** -1 0.5
- 9 ** 0.5
- Elevar a 0,5 (meio) é tirar a raiz quadrada: a raiz de 9 é 3. O resultado é
float. (O módulomathtambém temmath.sqrt(9); veja a aula O Módulo math.) - 2 ** -1
- Expoente negativo é "um dividido por": 2⁻¹ = 1 ÷ 2 = 0,5.
A potência aparece muito em contas de dinheiro. A Ana guardou R$ 1.000 numa aplicação que rende 1% ao mês. Quanto ela terá depois de 12 meses? A cada mês o valor é multiplicado por 1,01, então são 12 multiplicações: 1.01 ** 12.
valor = 1000 * 1.01 ** 12 print(valor) print(round(valor, 2))
$ python3 rendimento.py 1126.8250301319697 1126.83
R$ 1.126,83. Repare que o Python fez a potência antes da multiplicação, como na escola. A próxima seção explica essa ordem.
5. Qual conta vem primeiro
O Python segue a mesma ordem da Matemática: primeiro a potência, depois multiplicação e divisões, por fim soma e subtração. Os parênteses passam na frente de tudo.
$ python3 -q >>> 2 + 3 * 4 14 >>> (2 + 3) * 4 20 >>> 10 - 2 - 3 5 >>> 2 ** 3 ** 2 512 >>> -2 ** 2 -4 >>> (-2) ** 2 4
- 2 + 3 * 4 → 14
- A multiplicação vem antes: 3 × 4 = 12, mais 2 = 14.
- (2 + 3) * 4 → 20
- Os parênteses mandam fazer a soma primeiro: 5 × 4 = 20.
- 10 - 2 - 3 → 5
- Operadores do mesmo nível vão da esquerda para a direita: (10 − 2) − 3.
- 2 ** 3 ** 2 → 512
- A exceção: a potência vai da direita para a esquerda. É 2 ** (3 ** 2) = 2 ** 9 = 512, e não (2 ** 3) ** 2 = 64.
- -2 ** 2 → -4
- A potência vem antes do sinal de menos: é −(2²) = −4. Para elevar o −2, use parênteses:
(-2) ** 2= 4.
Na dúvida, use parênteses: eles não custam nada e deixam a sua intenção clara para quem lê. A tabela completa da ordem está na aula Precedência dos Operadores.
6. // e % com números negativos
Com números negativos, a divisão inteira tem uma surpresa:
$ python3 -q >>> -7 // 2 -4 >>> -7 % 2 1 >>> 7 // -2 -4 >>> 7 % -2 -1 >>> int(-7 / 2) -3
Por que -7 // 2 dá -4, se −7 ÷ 2 = −3,5? Porque o // sempre arredonda para baixo, na direção do menos infinito, e não "cortando as casas". Na reta dos números, abaixo de −3,5 vem o −4:
-5 -4 -3.5 -3 -2
───┼─────┼──────•─────┼─────┼───
▲ ▲
-7 // 2 int(-7 / 2)
(para baixo) (corta, vai para o zero)
// vai para o inteiro de baixo; o int() vai para o lado do zero.O % acompanha o // para a conta continuar fechando. A regra que o Python sempre garante é: quociente × divisor + resto = o número original. Para −7 e 2: (−4) × 2 + 1 = −7. Por isso -7 % 2 dá 1. Uma consequência útil: com o divisor positivo, o resto é sempre positivo (ou zero), então numero % 2 funciona para ver se um número negativo é par ou ímpar.
| Conta | Resultado | Por quê |
|---|---|---|
7 // 2 | 3 | 3,5 para baixo |
-7 // 2 | -4 | −3,5 para baixo |
int(-7 / 2) | -3 | int() corta, em direção ao zero |
-7 % 2 | 1 | (−4) × 2 + 1 = −7 |
7 % -2 | -1 | (−4) × (−2) + (−1) = 7: o resto tem o sinal do divisor |
Em C e Java, a divisão inteira de −7 por 2 dá −3 (corta em direção ao zero), e o resto dá −1; no JavaScript, o resto também dá −1. Se você vier de uma delas ou for traduzir uma conta, cuidado com os negativos. No Python, o jeito de "cortar" é o int(-7 / 2).
Formas diferentes de fazer a mesma conta
| Para | Forma | Quando usar |
|---|---|---|
| Quociente e resto | paes // 6 e paes % 6 | Quando você precisa de um só, ou quer deixar as duas contas claras |
divmod(paes, 6) | Quando precisa dos dois de uma vez: devolve (3, 2) | |
| Raiz quadrada | 9 ** 0.5 | Contas rápidas, sem importar nada |
math.sqrt(9) | Quando o código já usa o módulo math; deixa a intenção mais clara | |
| Ao quadrado | lado ** 2 | O costume |
lado * lado | Funciona igual; bom para quem ainda está se acostumando com o ** | |
| Divisão sem casas | a // b | Para "quantas vezes cabe" (arredonda para baixo) |
int(a / b) | Para cortar as casas (diferente de // com negativos) |
Quando dá errado
ZeroDivisionError
A Ana fez um programa para dividir a conta da festa entre as pessoas. Mas ninguém tinha confirmado presença ainda:
total = 120 pessoas = 0 print(total / pessoas)
$ python3 divide_zero.py
Traceback (most recent call last):
File "/home/ana/divide_zero.py", line 3, in <module>
print(total / pessoas)
~~~~~~^~~~~~~~~
ZeroDivisionError: division by zero
- Traceback (most recent call last)
- O programa começou e parou por causa de um erro.
- line 3
- Na linha 3.
- ~~~~~~^~~~~~~~~
- O chapeuzinho aponta a barra da divisão; os tils, os dois lados da conta.
- ZeroDivisionError: division by zero
- "Erro de divisão por zero". Como na Matemática, dividir por zero não tem resposta, e o Python se recusa a continuar.
Acontece com as três divisões: 10 // 0 e 10 % 0 dão o mesmo erro, assim como 10.0 / 0 e até 0 / 0. O erro raramente vem de um 0 escrito no código; quase sempre é uma variável que ficou com zero (uma lista vazia, ninguém confirmado, nenhuma venda no dia). Como consertar: confira antes se o divisor é zero, com um if, ou trate o erro com try e except.
No Python 3.14, a mensagem é sempre division by zero. No 3.13 (o do Debian 13), ela muda conforme a conta: integer division or modulo by zero (em 10 // 0), integer modulo by zero (em 10 % 0), float division by zero (em 10.0 / 0). O erro é o mesmo, ZeroDivisionError.
x no lugar do *: SyntaxError
area = 3 x 4
$ python3 xis.py
File "/home/ana/xis.py", line 1
area = 3 x 4
^
SyntaxError: invalid syntax
"Sintaxe inválida". Para o Python, x é uma letra, que poderia ser o nome de uma variável, e não faz sentido um nome logo depois do número 3. O chapeuzinho aponta o x. Como consertar: area = 3 * 4.
^ não é potência (e não dá erro)
print(2 ^ 3) print(2 ** 3)
$ python3 chapeu.py 1 8
Em calculadoras e planilhas, o ^ é a potência. No Python, ele é outro operador, que trabalha com os bits (os zeros e uns) dos números, e 2 ^ 3 dá 1, sem aviso nenhum. É um erro silencioso: o programa roda e o resultado sai errado. Como consertar: potência no Python é **.
TypeError: 'int' object is not callable
No caderno, 3(4 + 5) quer dizer "3 vezes (4 + 5)". No Python, não:
total = 3(4 + 5)
$ python3 colado.py
/home/ana/colado.py:1: SyntaxWarning: 'int' object is not callable; perhaps you missed a comma?
total = 3(4 + 5)
Traceback (most recent call last):
File "/home/ana/colado.py", line 1, in <module>
total = 3(4 + 5)
TypeError: 'int' object is not callable
Primeiro vem um aviso (SyntaxWarning), antes de o programa rodar: "objeto int não pode ser chamado; você esqueceu uma vírgula?". Depois, o erro de verdade: TypeError: 'int' object is not callable. Parênteses logo depois de um valor querem dizer "chame esta função", como em print(…), e o 3 não é uma função. Como consertar: escreva a multiplicação: total = 3 * (4 + 5).
Referência rápida
| Operador | O que faz | Exemplo | Resultado |
|---|---|---|---|
+ | Soma | 7 + 2 | 9 |
- | Subtração (ou sinal negativo) | 7 - 2 | 5 |
* | Multiplicação | 7 * 2 | 14 |
/ | Divisão, sempre float | 6 / 3 | 2.0 |
// | Divisão inteira, arredonda para baixo | 7 // 2, -7 // 2 | 3, -4 |
% | Resto da divisão | 7 % 2, -7 % 2 | 1, 1 |
** | Potência | 7 ** 2, 9 ** 0.5 | 49, 3.0 |
divmod(a, b) | Quociente e resto juntos | divmod(20, 6) | (3, 2) |
| Sintoma | Causa provável |
|---|---|
ZeroDivisionError: division by zero | O divisor (muitas vezes uma variável) valia zero |
SyntaxError: invalid syntax apontando um x | Use * para multiplicar |
| Potência dá um número estranho, sem erro | Usou ^: o certo é ** |
TypeError: 'int' object is not callable | Número colado nos parênteses: 3(4 + 5). Escreva 3 * (4 + 5) |
Resultado com .0 quando você esperava inteiro | A divisão / sempre dá float; use // se quer o inteiro |
Exercícios
1. Faça as contas
Escreva o que o Python mostra em cada conta:
2. Par ou ímpar
Complete a conta que dá 0 quando o número é par:
3. Quanto vale 8 / 2?
4. Quanto vale -9 // 2?
5. Qual expressão calcula 5 ao cubo (5³)?
6. Quanto vale 2 + 3 * 2?
Missão final: o rendimento da poupança
Missão: a Ana aplicou R$ 1.000 a 1% ao mês, por 12 meses. O programa multiplica por 12 em vez de elevar a 12 e mostra um valor absurdo. Troque o operador para calcular o rendimento certo.
valor = 1000 * 1.01 * 12 print(round(valor, 2))
valor = 1000 * 1.01 ** 12 print(round(valor, 2))
Resumo
- Os operadores aritméticos são
+,-,*,/,//,%e**. Multiplicar é*; potência é**(o^é outra coisa). /faz a divisão completa e sempre devolvefloat:6 / 3é2.0.//diz quantas vezes cabe, arredondando para baixo;%dá o resto. 20 pães em caixas de 6:20 // 6é 3 caixas,20 % 6são 2 pães sobrando.- Com negativos,
-7 // 2é-4e-7 % 2é1. Para cortar em direção ao zero, useint(-7 / 2). numero % 2é0para pares e1para ímpares.- A ordem é a da Matemática:
**, depois*///%, depois+-. Parênteses passam na frente; na dúvida, use-os. - Dividir por zero, com qualquer das três divisões, dá
ZeroDivisionError: division by zero.