Resposta rápida
Em Python, // é a divisão inteira (arredonda para baixo), % é o resto da divisão e ** é a potência. Já / é a divisão comum e sempre retorna float. Os operadores lógicos são and, or e not, e == compara valores enquanto = atribui.
1
2
3
4
5
print(7 / 2) # 3.5 (sempre float)
print(7 // 2) # 3 (divisão inteira)
print(7 % 2) # 1 (resto)
print(2 ** 3) # 8 (potência)
print(-7 // 2) # -4 (arredonda para baixo!)
Resumo em 30 segundos:
-
//arredonda para baixo, também com negativos:-7 // 2dá-4, não-3. -
%devolve o resto com o sinal do divisor:-7 % 3dá2.n % 2 == 0testa sené par. -
**vem antes do sinal de menos:-2 ** 2dá-4; use(-2) ** 2para obter4. -
andeorparam no primeiro resultado decisivo (curto-circuito) e devolvem um dos operandos:0 or 5dá5. -
=guarda um valor,==compara valores eisverifica se é o mesmo objeto (use-o só comNone).
Salve, salve Pythonista!
Nesse post vamos falar de Operadores em Python: Operadores Lógicos, Operadores Aritméticos, Operadores de Associação, Operadores de Comparação, Operadores de Identidade e Operadores de Atribuição!
Wow, é muito Operador! ![]()
Se você já programa em Python, já se deparou com esses operadores em algum momento: is, is not, ==, in, not in, and, or ou %=.
Nesse post, você vai dominar TODOS esses Operadores e aprender como utilizá-los em seus programas Python!
Está pronto, então vamos aprender sobre Operadores!
Vá Direto ao Assunto…
- Operadores em Python
- Operadores Aritméticos
- O que faz
//em Python (divisão inteira) - O que faz
%em Python (resto da divisão) - O que faz
**em Python (potência) - Operadores de Comparação
- Operadores de Atribuição
- Operadores Lógicos
- Operadores de Identidade
- Operadores de Associação
- Precedência de operadores em Python
- Tabela-resumo de todos os operadores Python
- Erros comuns
- Exercícios resolvidos
Operadores em Python
Operadores em Python são símbolos especiais (como +, ==, and ou +=) que realizam operações sobre um ou mais valores - fazendo contas, comparando dados ou combinando testes lógicos. Eles permitem que o desenvolvedor transcreva a lógica para código.
Python organiza esses operadores em seis famílias: aritméticos (contas), de comparação (relações entre valores), lógicos (and, or, not), de atribuição (=, +=…), de identidade (is) e de associação (in). Dominá-los é essencial para quem quer se tornar um verdadeiro Pythonista!
Veremos todos em detalhes agora, começando pelos Operadores Aritméticos!
Operadores Aritméticos
Os operadores aritméticos em Python realizam contas matemáticas - soma (+), subtração (-), multiplicação (*), divisão (/), divisão inteira (//), módulo (%) e exponenciação (**).
A lista completa, com as regras para int, float e complex, está na documentação oficial dos tipos numéricos. Veja quais estão disponíveis no Python:
| Operador | Nome | Função | Exemplo | Resultado |
|---|---|---|---|---|
+ |
Adição | Realiza a soma de ambos operandos. | 4 + 2 |
6 |
- |
Subtração | Realiza a subtração de ambos operandos. | 4 - 2 |
2 |
* |
Multiplicação | Realiza a multiplicação de ambos operandos. | 4 * 2 |
8 |
/ |
Divisão | Realiza a divisão de ambos operandos (sempre float). |
4 / 2 |
2.0 |
// |
Divisão inteira | Realiza a divisão e descarta a parte decimal do resultado. | 7 // 2 |
3 |
% |
Módulo | Retorna o resto da divisão de ambos operandos. | 7 % 2 |
1 |
** |
Exponenciação | Eleva o primeiro operando à potência do segundo. | 4 ** 2 |
16 |
Veja agora a utilização de cada operador aritmético mencionado acima:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
quatro = 4
dois = 2
soma = quatro + dois
print(soma) # Resultado: 6
subtracao = quatro - dois
print(subtracao) # Resultado: 2
multiplicacao = quatro * dois
print(multiplicacao) # Resultado: 8
divisao = quatro / dois
print(divisao) # Resultado: 2.0
divisao_interna = quatro // dois
print(divisao_interna) # Resultado: 2
modulo = quatro % dois
print(modulo) # Resultado: 0
exponenciacao = quatro ** dois
print(exponenciacao) # Resultado: 16
Casos de borda da divisão e do módulo
Dois detalhes pegam muita gente de surpresa:
1. A divisão / SEMPRE retorna um float, mesmo quando o resultado é exato - diferente da divisão inteira //, que devolve int quando os dois operandos são inteiros:
1
2
print(4 / 2) # 2.0 (float, mesmo "dividindo certinho")
print(4 // 2) # 2 (int)
2. Com números negativos, // arredonda para baixo (em direção a -∞) e o % acompanha para manter a relação matemática:
1
2
print(-7 // 3) # -3 (e não -2: arredonda para baixo)
print(-7 % 3) # 2 (o resto tem o sinal do divisor)
Esse comportamento é coerente: em Python, (a // b) * b + (a % b) sempre reconstrói o a original.
O que faz // em Python (divisão inteira)
O operador // faz a divisão inteira (em inglês, floor division): divide e arredonda o resultado para baixo, para o inteiro mais próximo em direção ao menos infinito. Com dois int, o resultado é int; se algum operando for float, o resultado é um float sem parte decimal.
1
2
3
4
5
print(7 // 2) # 3
print(10 // 4) # 2
print(7.5 // 2) # 3.0 (float, porque 7.5 é float)
print(7 // 2.0) # 3.0
print(-7 // 2) # -4 (e não -3!)
O caso que mais confunde é o do número negativo. -7 / 2 dá -3.5, e arredondar para baixo leva a -4. Isso é diferente de simplesmente “cortar” a parte decimal, que é o que int() faz:
1
2
3
4
5
6
import math
print(-7 // 2) # -4 (arredonda para baixo, igual a math.floor)
print(math.floor(-3.5)) # -4
print(int(-7 / 2)) # -3 (int() trunca: só descarta o decimal)
print(math.trunc(-3.5)) # -3
Para números positivos, // e int(a / b) dão o mesmo resultado; com negativos, não. Se você precisa do quociente e do resto de uma vez, use a função embutida divmod():
1
2
print(divmod(17, 5)) # (3, 2) -> 17 // 5 e 17 % 5
print(divmod(-7, 2)) # (-4, 1)
O que faz % em Python (resto da divisão)
O operador % (chamado de módulo) devolve o resto da divisão inteira entre dois números. 7 % 2 dá 1 porque 7 dividido por 2 dá 3 e sobra 1. É o operador por trás de vários truques clássicos:
1
2
3
4
5
print(10 % 3) # 1
print(8 % 2) # 0 -> 8 é par (resto zero na divisão por 2)
print(7 % 2) # 1 -> 7 é ímpar
print(1234 % 10) # 4 -> último dígito do número
print(7.5 % 2) # 1.5 (também funciona com float)
Com negativos, o resultado de % sempre tem o sinal do divisor (o número da direita). É o par exato do // arredondando para baixo:
1
2
3
print(-7 % 3) # 2
print(7 % -3) # -2
print(-7 % 2) # 1
Em código mais antigo você vai ver
%com strings, como'%s tem %d anos' % ('Ana', 30), que resulta emAna tem 30 anos. Aí ele não é resto de divisão: é a formatação de texto no estilo antigo. Hoje prefira as f-strings no Python.
/, // ou %: qual usar?
Essa comparação cai muito em prova (as famosas questões de “relacione a coluna A com a coluna B”):
| Operador | Nome | O que devolve | Exemplo | Resultado | Use quando… |
|---|---|---|---|---|---|
/ |
Divisão | A divisão com decimais, sempre float
|
7 / 2 |
3.5 |
Precisa do valor exato (médias, preços, porcentagens) |
// |
Divisão inteira | O quociente arredondado para baixo | 7 // 2 |
3 |
Quer “quantas vezes cabe” (páginas, grupos, horas inteiras) |
% |
Módulo | O resto da divisão | 7 % 2 |
1 |
Quer “o que sobra” (par/ímpar, múltiplos, último dígito, ciclos) |
O que faz ** em Python (potência)
O operador ** calcula a potência (exponenciação): a ** b é “a elevado a b”. Funciona com expoentes negativos e fracionários, então também serve para tirar raízes:
1
2
3
4
5
print(2 ** 10) # 1024
print(4 ** 2) # 16
print(2 ** -1) # 0.5 (expoente negativo = 1 / 2)
print(9 ** 0.5) # 3.0 (raiz quadrada)
print(pow(2, 10)) # 1024 (a função pow() faz o mesmo)
Dois detalhes do ** pegam muita gente:
1
2
3
print(-2 ** 2) # -4 -> vira -(2 ** 2), pois ** vem antes do sinal de menos
print((-2) ** 2) # 4 -> com parênteses, eleva o número negativo
print(2 ** 3 ** 2) # 512 -> associativo à direita: 2 ** (3 ** 2) = 2 ** 9
Fora das contas,
**aparece em outros dois lugares: emdef funcao(**kwargs), para receber argumentos nomeados (veja*argse**kwargsno Python), e em{**a, **b}, para juntar dicionários. Nesses casos ele não é potência, é desempacotamento.
Operadores de Comparação
Os operadores de comparação em Python comparam dois valores e devolvem sempre um booleano (True ou False). São a base das estruturas condicionais no Python, como o if.
| Operador | Nome | Função | Exemplo | Resultado |
|---|---|---|---|---|
== |
Igual a | Verifica se um valor é igual ao outro | 5 == 5 |
True |
!= |
Diferente de | Verifica se um valor é diferente do outro | 5 != 7 |
True |
> |
Maior que | Verifica se um valor é maior que outro | 5 > 2 |
True |
>= |
Maior ou igual | Verifica se um valor é maior ou igual ao outro | 5 >= 5 |
True |
< |
Menor que | Verifica se um valor é menor que outro | 5 < 7 |
True |
<= |
Menor ou igual | Verifica se um valor é menor ou igual ao outro | 5 <= 5 |
True |
Vamos ver exemplos da utilização de cada operador de comparação mencionado acima.
Para facilitar o entendimento, todas as operações estão retornando um valor igual a True, para que você entenda como cada condição é aceita:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var = 5
if var == 5:
print('Os valores são iguais')
if var != 7:
print('O valor não é igual a 7')
if var > 2:
print('O valor da variável é maior de 2')
if var >= 5:
print('O valor da variável é maior ou igual a 5')
if var < 7:
print('O valor da variável é menor que 7')
if var <= 5:
print('O valor da variável é menor ou igual a 5')
Resultado do código acima:
1
2
3
4
5
6
Os valores são iguais
O valor não é igual a 7
O valor da variável é maior de 2
O valor da variável é maior ou igual a 5
O valor da variável é menor que 7
O valor da variável é menor ou igual a 5
Estou desenvolvendo o Ebookr.ai, uma plataforma que transforma suas ideias em ebooks profissionais usando IA - com geração de capa, infográficos e exportação em PDF. Te convido a conhecer!
Operadores de Atribuição
Os operadores de atribuição em Python guardam um valor em uma variável - e os compostos (como +=) ainda aplicam uma conta antes de guardar, funcionando como atalho. Para relembrar como variáveis funcionam, veja tipos de variáveis no Python.
Veja quais Operadores de Atribuição estão disponíveis em Python:
| Operador | Equivalente a | Exemplo (x = 4) |
Resultado |
|---|---|---|---|
= |
x = 4 |
x = 4 |
4 |
+= |
x = x + 4 |
x += 4 |
8 |
-= |
x = x - 4 |
x -= 4 |
0 |
*= |
x = x * 4 |
x *= 4 |
16 |
/= |
x = x / 4 |
x /= 4 |
1.0 |
//= |
x = x // 4 |
x //= 4 |
1 |
%= |
x = x % 4 |
x %= 4 |
0 |
**= |
x = x ** 4 |
x **= 4 |
256 |
Exemplo da utilização de cada operador de atribuição mencionado acima:
Operador +=:
1
2
3
4
numero = 5
numero += 7
print(numero) # Resultado será 12
Operador -=:
1
2
3
4
numero = 5
numero -= 3
print(numero) # Resultado será 2
Operador *=:
1
2
3
4
numero = 5
numero *= 2
print(numero) # Resultado será 10
Operador /=:
1
2
3
4
numero = 5
numero /= 4
print(numero) # Resultado será 1.25
Operador %=:
1
2
3
4
numero = 5
numero %= 2
print(numero) # Resultado será 1
Obs: O operador % é chamado módulo e nada mais é que o resto da divisão. No exemplo acima: 5 dividido por 2 dá 2 de resultado e sobra 1. Por isso numero %= 2 será 1!
Python não tem
++nem--. Para somar 1 a um contador, escrevacontador += 1.
Diferença entre = e ==
O = atribui (guarda um valor numa variável) e o == compara (pergunta se dois valores são iguais e devolve True ou False). Trocar um pelo outro é um dos erros mais comuns de quem está começando:
1
2
3
4
5
6
idade = 18 # atribuição: idade passa a valer 18
print(idade == 18) # comparação: True
print(idade == 21) # comparação: False
if idade == 18: # no if, sempre ==
print("Acabou de fazer 18!")
Saída:
1
2
3
True
False
Acabou de fazer 18!
Se você escrever if idade = 18:, o Python recusa o código com SyntaxError (veja em Erros comuns). E ainda existe um terceiro “igual”, o is, que tem outro papel:
| Operador | Tipo | Pergunta que responde | Exemplo | Quando usar |
|---|---|---|---|---|
= |
Atribuição | Nenhuma: guarda um valor | x = 5 |
Criar ou atualizar variáveis |
== |
Comparação | “Os valores são iguais?” | x == 5 |
Comparar números, strings, listas… (quase sempre) |
is |
Identidade | “É o mesmo objeto na memória?” | x is None |
Checar None ou se duas variáveis apontam para o mesmo objeto |
Está curtindo esse conteúdo? ![]()
Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?
Operadores Lógicos
Os operadores lógicos em Python combinam ou invertem condições booleanas para montar os famosos testes lógicos. São três: and, or e not.
Vamos ver mais sobre eles agora!
| Operador | Definição | Exemplo | Resultado |
|---|---|---|---|
and |
Retorna True se ambas as afirmações forem verdadeiras |
True and False |
False |
or |
Retorna True se ao menos uma das afirmações for verdadeira |
True or False |
True |
not |
Inverte o booleano: True vira False e vice-versa |
not True |
False |
Exemplo da utilização de cada um:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
num1 = 7
num2 = 4
# Exemplo and
if num1 > 3 and num2 < 8:
print("As Duas condições são verdadeiras")
# Exemplo or
if num1 > 4 or num2 <= 8:
print("Uma ou duas das condições são verdadeiras")
# Exemplo not
if not (num1 < 30 and num2 < 8):
print('Inverte o resultado da condição entre os parênteses')
Resultado do código acima:
1
2
As Duas condições são verdadeiras
Uma ou duas das condições são verdadeiras
Repare que a terceira mensagem não aparece: num1 < 30 and num2 < 8 é True, e o not inverte para False, então o if não executa. Para ver esses testes em ação dentro de programas, confira as estruturas de repetição, onde and, or e not controlam quando um while deve parar.
and e or retornam um dos operandos (curto-circuito)
and e or não devolvem necessariamente True ou False: eles devolvem um dos operandos, e param de avaliar assim que já sabem a resposta. Isso se chama avaliação em curto-circuito, e está descrito na documentação das operações booleanas:
-
x or y: sexfor verdadeiro, devolvex(nem olha paray); senão, devolvey. -
x and y: sexfor falso, devolvex(nem olha paray); senão, devolvey.
Valores “falsos” em Python são False, None, 0, 0.0, "", [], {} e outras coleções vazias. Todo o resto é “verdadeiro”.
1
2
3
4
5
6
7
print(3 and 5) # 5 (3 é verdadeiro, então devolve o segundo)
print(0 and 5) # 0 (0 é falso, para aqui)
print(0 or "padrão") # padrão
print([] or [1]) # [1]
nome = ""
print(nome or "Anônimo") # Anônimo (valor padrão quando a string está vazia)
O curto-circuito também protege contra erros. No exemplo abaixo, a divisão nunca é executada quando x é zero, porque o and para no primeiro False:
1
2
x = 0
print(x != 0 and 10 / x > 1) # False (sem ZeroDivisionError)
Operadores de Identidade
Estes Operadores são utilizados para comparar objetos, verificando se os objetos testados referenciam o mesmo objeto (is) ou não (is not).
| Operador | Definição |
|---|---|
is |
Retorna True se ambas as variáveis são o mesmo objeto |
is not |
Retorna True se ambas as variáveis não forem o mesmo objeto |
Agora vamos aos exemplos de como utilizar cada operador de identidade mencionado acima:
Exemplo do operador is:
1
2
3
4
5
6
7
8
9
lista = [1, 2, 3]
outra_lista = [1, 2, 3]
recebe_lista = lista
# Recebe True, pois são o mesmo objeto
print(f"São o mesmo objeto? {lista is recebe_lista}")
# Retorna False, pois são objetos diferentes
print(f"São o mesmo objeto? {lista is outra_lista}")
Resultado do código acima:
1
2
São o mesmo objeto? True
São o mesmo objeto? False
Exemplo do operador is not:
1
2
3
4
5
lista = [1, 2, 3]
outra_lista = [1, 2, 3]
print(f"Os objetos são diferentes? {outra_lista is not lista}")
print(f"Os valores são iguais? {outra_lista == lista}")
Resultado do código acima:
1
2
Os objetos são diferentes? True
Os valores são iguais? True
Diferença entre is e ==
Muitas vezes programadores Python ficam na dúvida em quando utilizar o operador de igualdade == ou o operador de identidade is.
Mas agora que você já conhece os dois sabe que o operador == verifica os valores testados, enquanto o operador is testa a referência dos valores testados! ![]()
Antipadrão: nunca use
ispara comparar números (ou strings). Para comparar valores, use sempre==. Oisparece funcionar com inteiros pequenos porque o Python mantém em cache os valores de-5a256, mas isso quebra com números maiores:
1
2
3
4
5
6
7
8
9
a = int("256")
b = int("256")
print(a == b) # True (valores iguais)
print(a is b) # True (mesmo objeto em cache)
c = int("257")
d = int("257")
print(c == d) # True (valores iguais)
print(c is d) # False (objetos diferentes!)
Repare: c == d é True, mas c is d é False. Por isso, reserve o is para checar identidade de verdade - como em if x is None:.
Operadores de Associação
Por último, temos os Operadores de Associação.
Eles servem para verificar se determinado objeto está associado ou pertence a determinada estrutura de dados.
| Operador | Função |
|---|---|
in |
Retorna True caso o valor seja encontrado na sequência |
not in |
Retorna True caso o valor não seja encontrado na sequência |
Exemplo da utilização de cada operador de associação mencionado acima:
1
2
3
4
5
6
7
lista = ["Python", 'Academy', "Operadores", 'Condições']
# Verifica se existe a string dentro da lista
print('Python' in lista) # Saída: True
# Verifica se não existe a string dentro da lista
print('SQL' not in lista) # Saída: True
Antes de fechar com a tabela de precedência, vale lembrar: operadores bem entendidos são a base de qualquer lógica em Python. Se você quer construir esse alicerce com aulas práticas e suporte de professor, a Jornada Python é pra isso:
Precedência de operadores em Python
Quando uma expressão mistura vários operadores, o Python segue uma ordem fixa de precedência: parênteses, depois **, depois o sinal (-x), depois *, /, // e %, depois + e -, depois as comparações e, por último, not, and e or. Operadores do mesmo nível são avaliados da esquerda para a direita, com exceção do **, que vai da direita para a esquerda.
| Ordem | Operadores | Descrição |
|---|---|---|
| 1 (primeiro) | ( ) |
Parênteses |
| 2 | ** |
Potência |
| 3 |
+x, -x
|
Sinal positivo e negativo |
| 4 |
*, /, //, %
|
Multiplicação, divisões e resto |
| 5 |
+, -
|
Soma e subtração |
| 6 |
==, !=, >, >=, <, <=, is, is not, in, not in
|
Comparações, identidade e associação |
| 7 | not |
Negação lógica |
| 8 | and |
E lógico |
| 9 (último) | or |
OU lógico |
Os operadores bit a bit ficam entre as somas e as comparações; a tabela completa está na documentação oficial de precedência de operadores. Na prática, veja como a ordem muda o resultado:
1
2
3
4
5
6
7
8
print(2 + 3 * 4) # 14 (multiplicação antes da soma)
print((2 + 3) * 4) # 20 (parênteses primeiro)
print(-2 ** 2) # -4 (** antes do sinal: -(2 ** 2))
print((-2) ** 2) # 4
print(2 ** 3 ** 2) # 512 (** da direita para a esquerda: 2 ** 9)
print(10 - 4 - 3) # 3 (esquerda para a direita: (10 - 4) - 3)
print(True or False and False) # True (and antes de or)
print(not True == False) # True (== antes de not: not (True == False))
Dica: comparações podem ser encadeadas, como na matemática. 1 < 2 < 3 é True e equivale a 1 < 2 and 2 < 3. Na dúvida sobre a ordem, use parênteses: deixam o código mais legível e não custam nada.
Tabela-resumo de todos os operadores Python
Para consultar rápido (todos os resultados foram conferidos no Python 3.10; nas linhas de atribuição, considere x = 4 antes de cada exemplo):
| Categoria | Operador | Significado | Exemplo | Resultado |
|---|---|---|---|---|
| Aritmético | + |
Soma | 4 + 2 |
6 |
| Aritmético | - |
Subtração | 4 - 2 |
2 |
| Aritmético | * |
Multiplicação | 4 * 2 |
8 |
| Aritmético | / |
Divisão (sempre float) |
7 / 2 |
3.5 |
| Aritmético | // |
Divisão inteira (para baixo) | 7 // 2 |
3 |
| Aritmético | % |
Resto da divisão | 7 % 2 |
1 |
| Aritmético | ** |
Potência | 2 ** 3 |
8 |
| Comparação | == |
Igual a | 5 == 5.0 |
True |
| Comparação | != |
Diferente de | 5 != 7 |
True |
| Comparação | > |
Maior que | 5 > 2 |
True |
| Comparação | < |
Menor que | 5 < 2 |
False |
| Comparação | >= |
Maior ou igual | 5 >= 5 |
True |
| Comparação | <= |
Menor ou igual | 4 <= 3 |
False |
| Lógico | and |
E | True and False |
False |
| Lógico | or |
OU | True or False |
True |
| Lógico | not |
Negação | not True |
False |
| Atribuição | = |
Atribui | x = 4 |
x vale 4
|
| Atribuição | += |
Soma e atribui | x += 1 |
5 |
| Atribuição | -= |
Subtrai e atribui | x -= 1 |
3 |
| Atribuição | *= |
Multiplica e atribui | x *= 2 |
8 |
| Atribuição | /= |
Divide e atribui | x /= 2 |
2.0 |
| Atribuição | //= |
Divisão inteira e atribui | x //= 3 |
1 |
| Atribuição | %= |
Resto e atribui | x %= 3 |
1 |
| Atribuição | **= |
Potência e atribui | x **= 2 |
16 |
| Identidade | is |
É o mesmo objeto | None is None |
True |
| Identidade | is not |
Não é o mesmo objeto | [1] is not [1] |
True |
| Associação | in |
Está contido | 'a' in 'casa' |
True |
| Associação | not in |
Não está contido | 3 not in [1, 2] |
True |
Erros comuns
1. Usar = no lugar de == dentro do if
1
2
3
x = 5
if x = 5:
print("cinco")
1
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
O = só atribui; para comparar, use ==: if x == 5:. (Em versões anteriores ao Python 3.10 a mensagem é apenas SyntaxError: invalid syntax.)
2. Escrever if cor == "azul" or "verde" (condição sempre verdadeira)
Não dá erro, mas o resultado está errado: a cor é vermelha e mesmo assim entra no if.
1
2
3
4
cor = "vermelho"
if cor == "azul" or "verde":
print("Cor fria!") # imprime "Cor fria!", mesmo sendo vermelho
Como == tem precedência maior que or, o Python lê (cor == "azul") or "verde". O primeiro lado é False, então o or devolve "verde", uma string não vazia, que conta como verdadeira. A correção é repetir a comparação ou usar in:
1
2
3
4
5
6
7
cor = "vermelho"
if cor == "azul" or cor == "verde":
print("Cor fria!")
if cor in ("azul", "verde"): # forma mais pythônica
print("Cor fria!")
Agora nada é impresso, como esperado.
3. Dividir por zero com /, // ou %
1
print(10 / 0)
1
ZeroDivisionError: division by zero
Com // ou % a mensagem muda para ZeroDivisionError: integer division or modulo by zero. Teste o divisor antes (ou trate a exceção com try/except):
1
2
3
4
5
6
divisor = 0
if divisor != 0:
print(10 / divisor)
else:
print("Não dá para dividir por zero") # é isso que aparece
4. Fazer conta com o valor do input() sem converter
1
2
idade = "30" # é isso que o input() devolve: sempre uma string
print(idade + 1)
1
TypeError: can only concatenate str (not "int") to str
Com strings, + concatena em vez de somar. Converta antes: print(int(idade) + 1) mostra 31. Esse erro é tão comum que tem seção própria no post sobre input e print no Python.
5. Tentar usar ++ para incrementar
1
2
contador = 0
contador++
1
SyntaxError: invalid syntax
Python não tem ++ nem -- (comuns em C, Java e JavaScript). Use o operador de atribuição composta: contador += 1.
Exercícios resolvidos
Tente resolver cada um antes de abrir a solução. Todas as saídas foram conferidas executando o código.
Exercício 1. Sem rodar o código, diga o que é impresso por print(17 / 5), print(17 // 5) e print(17 % 5).
Ver solução
1
2
3
print(17 / 5)
print(17 // 5)
print(17 % 5)
Saída: 3.4, 3 e 2 (uma por linha)
/ dá a divisão exata em float; // diz quantas vezes o 5 cabe inteiro em 17 (3 vezes, que dá 15); % é o que sobra (17 - 15 = 2).
Exercício 2 (estilo prova). Relacione as operações de Python da coluna A com as suas funções da coluna B:
- Coluna A: a.
//b.%c./ - Coluna B: 1. resto da divisão 2. divisão inteira 3. divisão com decimais
Assinale a alternativa correta:
a) a-1, b-2, c-3
b) a-2, b-1, c-3
c) a-3, b-2, c-1
d) a-2, b-3, c-1
Ver solução
1
2
3
print(7 // 2) # divisão inteira
print(7 % 2) # resto da divisão
print(7 / 2) # divisão com decimais
Saída: 3, 1 e 3.5 (uma por linha)
Resposta: b. // é a divisão inteira (a-2), % é o resto (b-1) e / é a divisão com decimais, que sempre devolve float (c-3).
Exercício 3. Escreva um programa que percorra os números de 1 a 5 e diga se cada um é par ou ímpar.
Ver solução
1
2
3
4
5
for n in range(1, 6):
if n % 2 == 0:
print(n, "é par")
else:
print(n, "é ímpar")
Saída:
1
2
3
4
5
1 é ímpar
2 é par
3 é ímpar
4 é par
5 é ímpar
Um número é par quando o resto da divisão por 2 é zero, ou seja, n % 2 == 0.
Exercício 4. Converta 3725 segundos para o formato Xh Ymin Zs usando apenas // e %.
Ver solução
1
2
3
4
5
6
7
total = 3725
horas = total // 3600
minutos = (total % 3600) // 60
segundos = total % 60
print(f"{horas}h {minutos}min {segundos}s")
Saída: 1h 2min 5s
// 3600 conta as horas inteiras; % 3600 pega o que sobrou (125 s), e // 60 transforma isso em minutos. O % 60 final devolve os segundos restantes.
Exercício 5 (estilo prova). Qual o valor impresso por print(2 + 3 * 2 ** 2)?
a) 100
b) 14
c) 20
d) 64
Ver solução
1
2
3
4
5
print(2 + 3 * 2 ** 2)
# passo a passo:
# 2 ** 2 -> 4 (potência primeiro)
# 3 * 4 -> 12 (depois multiplicação)
# 2 + 12 -> 14 (por último a soma)
Saída: 14
Resposta: b. Pela precedência, ** vem antes de *, que vem antes de +. As outras alternativas aparecem se você calcular da esquerda para a direita (100), somar antes de multiplicar (20) ou elevar tudo ao quadrado no fim (64).
Exercício 6 (estilo prova). Quais os valores de -7 // 2 e -7 % 2 em Python?
a) -3 e -1
b) -4 e 1
c) -3 e 1
d) -4 e -1
Ver solução
1
2
3
print(-7 // 2)
print(-7 % 2)
print((-7 // 2) * 2 + (-7 % 2)) # confere: volta a -7
Saída: -4, 1 e -7 (uma por linha)
Resposta: b. -7 / 2 é -3.5, e // arredonda para baixo, dando -4. O resto acompanha para que (-4) * 2 + 1 volte a ser -7.
Exercício 7 (estilo prova). Sobre operadores de comparação em Python, marque V (verdadeiro) ou F (falso):
- ( ) O operador
==é usado para comparar se dois valores são iguais. - ( )
=e==podem ser usados um no lugar do outro dentro de umif. - ( ) O operador
isé a forma recomendada de comparar dois números. - ( ) A expressão
5 != 5.0retornaTrue, porque um éinte o outro éfloat.
a) V, F, F, F
b) V, V, F, F
c) V, F, V, F
d) F, F, V, V
Ver solução
1
2
3
4
5
x = 5
print(x == 5) # afirmação 1: == compara valores
print(5 == 5.0) # int e float com o mesmo valor
print(5 != 5.0) # afirmação 4
print(x is None) # is é para identidade, não para comparar números
Saída: True, True, False e False (uma por linha)
Resposta: a. Só a primeira é verdadeira: = dentro do if dá SyntaxError, is testa identidade (e falha com números fora do cache de -5 a 256), e 5 == 5.0 é True, então 5 != 5.0 é False.
Exercício 8. Um ano é bissexto se for divisível por 4 e não for divisível por 100, ou se for divisível por 400. Escreva uma função que implemente essa regra e teste com 1900, 2000, 2024 e 2026.
Ver solução
1
2
3
4
5
def eh_bissexto(ano):
return (ano % 4 == 0 and ano % 100 != 0) or ano % 400 == 0
for ano in (1900, 2000, 2024, 2026):
print(ano, eh_bissexto(ano))
Saída:
1
2
3
4
1900 False
2000 True
2024 True
2026 False
% testa a divisibilidade (resto zero), e and/or combinam as regras. Os parênteses não são obrigatórios (o and já vem antes do or), mas deixam a regra muito mais clara.
Conclusão
Vimos nesse post os diversos tipos de Operadores que o Python disponibiliza para que possamos desenvolver nossos scripts na Linguagem!
Agora que você já sabe como utilizá-los, você deu um passo importante para conhecer a fundo a linguagem Python! O próximo passo natural é usar esses operadores para tomar decisões com as estruturas condicionais e repetir tarefas com as estruturas de repetição.
Se quiser praticar tudo isso com exercícios e projetos guiados, do básico ao avançado, conheça o nosso curso de Python completo, a Jornada Python.
Se ficou com alguma dúvida, fique à vontade para deixar um comentário no box aqui embaixo! Será um prazer te responder! ![]()
Perguntas frequentes
Qual a diferença entre / e // em Python?
A diferença é que / é a divisão real e sempre retorna um float (ex.: 4 / 2 dá 2.0), enquanto // é a divisão inteira e descarta a parte decimal, arredondando para baixo (ex.: 7 // 2 dá 3).
O que faz o operador % (módulo) em Python?
O operador % (módulo) retorna o resto da divisão entre dois números. Por exemplo, 7 % 2 dá 1, pois 7 dividido por 2 sobra 1. É muito usado para testar se um número é par: n % 2 == 0.
Qual a diferença entre == e is em Python?
O == compara os valores (se são iguais), enquanto o is compara a identidade (se são o mesmo objeto na memória). Para comparar números ou strings, use sempre ==; reserve o is para checar None.
O que fazem os operadores and, or e not em Python?
São os operadores lógicos: and retorna True só se ambas as condições forem verdadeiras; or retorna True se ao menos uma for; e not inverte o booleano (not True vira False e not False vira True). Detalhe: and e or na verdade devolvem um dos operandos e param assim que sabem a resposta (curto-circuito), por isso 0 or "padrão" dá "padrão" e 3 and 5 dá 5.
O que faz ** em Python?
O operador ** é a potência (exponenciação): 2 ** 10 dá 1024 e 9 ** 0.5 dá 3.0 (raiz quadrada). Ele tem precedência maior que o sinal de menos, então -2 ** 2 dá -4; para elevar o número negativo use parênteses: (-2) ** 2 dá 4. Ele também é associativo à direita: 2 ** 3 ** 2 é 2 ** 9, ou seja, 512.
Quanto é -7 // 2 em Python?
O resultado é -4, e não -3. O operador // arredonda para baixo (em direção ao menos infinito), e -3,5 arredondado para baixo é -4. Pelo mesmo motivo, -7 % 2 dá 1, porque em Python o resto sempre tem o sinal do divisor e vale a relação (a // b) * b + a % b == a.
Qual a diferença entre = e == em Python?
O = é o operador de atribuição: guarda um valor em uma variável (x = 5). O == é o operador de comparação: pergunta se dois valores são iguais e devolve True ou False (x == 5). Usar = dentro de um if gera SyntaxError.
Relacione os operadores //, % e / com suas funções: resto da divisão, divisão inteira e divisão com decimais.
// é a divisão inteira (7 // 2 dá 3), % é o resto da divisão (7 % 2 dá 1) e / é a divisão com decimais, que sempre retorna float (7 / 2 dá 3.5).
"Porque o Senhor dá a sabedoria, e da sua boca vem a inteligência e o entendimento" Pv 2:6