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.

Você vai aprender
  • 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 // 2 dá -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 x no 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.

OperadorNomeExemploResultadoNo caderno
+Soma7 + 297 + 2
-Subtração7 - 257 − 2
*Multiplicação7 * 2147 × 2
/Divisão7 / 23.57 ÷ 2
//Divisão inteira7 // 23O quociente da "conta armada"
%Resto7 % 21O resto da "conta armada"
**Potência7 ** 2497²
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
Espaços em volta dos operadores

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
PerguntaContaComo ler o resultado
O número é par?numero % 20: par. 1: ímpar
Quanto sobra depois de encher as caixas?paes % 6Os pães fora das caixas
Um número é múltiplo de outro?ano % 40: é múltiplo (divide certinho)
Quantos minutos sobram depois das horas cheias?135 % 6015 (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ódulo math também tem math.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)
Na reta, o // 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.

ContaResultadoPor quê
7 // 233,5 para baixo
-7 // 2-4−3,5 para baixo
int(-7 / 2)-3int() corta, em direção ao zero
-7 % 21(−4) × 2 + 1 = −7
7 % -2-1(−4) × (−2) + (−1) = 7: o resto tem o sinal do divisor
Outras linguagens fazem diferente

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

ParaFormaQuando usar
Quociente e restopaes // 6 e paes % 6Quando 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 quadrada9 ** 0.5Contas 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 quadradolado ** 2O costume
lado * ladoFunciona igual; bom para quem ainda está se acostumando com o **
Divisão sem casasa // bPara "quantas vezes cabe" (arredonda para baixo)
int(a / b)Para cortar as casas (diferente de // com negativos)

Quando dá errado

Divisão por zero: 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.

Em versões anteriores do Python 3.14

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.

Um 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.

O ^ 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 é **.

Número colado nos parênteses: 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

OperadorO que fazExemploResultado
+Soma7 + 29
-Subtração (ou sinal negativo)7 - 25
*Multiplicação7 * 214
/Divisão, sempre float6 / 32.0
//Divisão inteira, arredonda para baixo7 // 2, -7 // 23, -4
%Resto da divisão7 % 2, -7 % 21, 1
**Potência7 ** 2, 9 ** 0.549, 3.0
divmod(a, b)Quociente e resto juntosdivmod(20, 6)(3, 2)
SintomaCausa provável
ZeroDivisionError: division by zeroO divisor (muitas vezes uma variável) valia zero
SyntaxError: invalid syntax apontando um xUse * para multiplicar
Potência dá um número estranho, sem erroUsou ^: o certo é **
TypeError: 'int' object is not callableNúmero colado nos parênteses: 3(4 + 5). Escreva 3 * (4 + 5)
Resultado com .0 quando você esperava inteiroA 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:

17 // 5 → 17 % 5 → 10 / 4 → 2 ** 5 →

2. Par ou ímpar

Complete a conta que dá 0 quando o número é par:

numero 2

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 devolve float: 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 % 6 são 2 pães sobrando.
  • Com negativos, -7 // 2 é -4 e -7 % 2 é 1. Para cortar em direção ao zero, use int(-7 / 2).
  • numero % 2 é 0 para pares e 1 para í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.