Python: Visão Geral dos Operadores

Última atualização: 2026-09-22

Programação é essencialmente "realizar operações em dados." Na Lição 02 aprendemos sobre variáveis; agora vamos aprender sobre operadores — quais capacidades computacionais o Python oferece. Aritmética, comparação, decisões lógicas, concatenação de strings... Depois desta lição, você resolverá muitos problemas do mundo real com Python.


Palavras-chave / Instruções relacionadas:input() float False True None

1. Operadores Aritméticos

Usamos alguns operadores na Lição 02. Aqui está a lista completa:

Operador Nome Exemplo Resultado Observações
+ Adição 5 + 3 8 Também funciona para concatenação de strings
- Subtração 5 - 3 2 Também usado como negação: -5
* Multiplicação 5 * 3 15 Também funciona para repetição de strings
/ Divisão 5 / 3 1.666... Sempre retorna um float
// Divisão inteira 5 // 3 1 Arredonda para baixo, descarta parte fracionária
% Módulo 5 % 3 2 Resto da divisão
** Exponenciação 5 ** 3 125 5 elevado a 3

(1) Dois Operadores que Merecem Atenção

Particularidade do / (Divisão):

PYTHON
print(4 / 2)    # Saída 2.0, não 2

Muitas pessoas param aqui: 4 dividido por 2 é claramente 2, então por que o Python exibe 2.0? Porque o / do Python sempre retorna um float, mesmo quando a divisão é exata. Isso mantém os resultados previsíveis — você vê / e sabe que o resultado será float.

Armadilha do // (Divisão inteira):

PYTHON
print(7 // 3)     # Saída 2 (7 ÷ 3 = 2.333, arredondado para baixo = 2)
print(-7 // 3)    # Saída -3 ← pode não ser o que você espera

-7 // 3 resulta em -3, não -2. O // do Python é divisão de piso (arredonda em direção ao infinito negativo), não "truncamento em direção a zero." Na reta numérica, -2.333 arredondado para baixo é -3. Se você quiser truncamento em direção a zero, use int(-7 / 3), que resulta em -2.

💡 Dica: Pense em // como "divisão de piso" em vez de "divisão inteira" — "divisão inteira" implica truncamento, o que não vale para números negativos.

▶ Exemplo: Conversão de Polegadas e Centímetros (Dificuldade ⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
12 polegadas = 30.48 cm
30 cm = 11.81 polegadas
12 polegadas podem ser divididas em 2 segmentos de 5 polegadas, com 2 polegadas restantes


2. Operadores de Comparação

Operadores de comparação avaliam relações entre valores e sempre retornam um booleano (True ou False). Eles são a base da lógica condicional.

Operador Nome Exemplo Resultado
== Igual a 5 == 3 False
!= Diferente de 5 != 3 True
> Maior que 5 > 3 True
< Menor que 5 < 3 False
>= Maior ou igual 5 >= 5 True
<= Menor ou igual 5 <= 3 False
PYTHON
age = 18
print(age == 18)     # True (exatamente 18)
print(age != 18)     # False (não "diferente")
print(age > 21)      # False (não tem idade para beber nos EUA)
print(age >= 18)     # True (exatamente maior de idade, atende à condição)

(1) Comparações Encadeadas

Python suporta uma sintaxe concisa rara em outras linguagens:

PYTHON
x = 15
print(10 < x < 20)   # True (equivalente a 10 < x and x < 20)
print(0 < x < 10)    # False

Isso é lido de forma mais natural que 10 < x and x < 20, como notação matemática.

(2) is e is not (Comparação de Identidade)

A rigor, is não é um operador de comparação, mas é frequentemente comparado com ==:

PYTHON
a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a == b)     # True (mesmo conteúdo)
print(a is b)     # False (mas não é o mesmo objeto)
print(a is c)     # True (c é apenas um apelido para a)

No desenvolvimento diário, 99% das vezes você usa ==. A convenção é usar is apenas ao verificar None: if result is None:.

▶ Exemplo: Classificação por Grupo de Corrida (Dificuldade ⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Idade do participante: 14
Grupo Juvenil (12-15): True
Grupo Jovem (16-20): False
Idade verificada: True
Idade não verificada: False


3. Operadores Lógicos

Operadores lógicos combinam múltiplas condições, e o resultado também é um booleano. Eles são usados em toda parte em condições if e laços.

Operador Nome Exemplo Resultado Observações
and E lógico True and False False Verdadeiro apenas se ambos são verdadeiros
or OU lógico True or False True Verdadeiro se pelo menos um é verdadeiro
not NÃO lógico not True False Negação
PYTHON
age = 20
has_id_card = True

# and: ambas as condições devem ser atendidas
print(age >= 18 and has_id_card)   # True (adulto e tem documento)

# or: pelo menos uma condição
print(age >= 18 or has_id_card)    # True (na verdade ambas são atendidas)

# not: negação
print(not has_id_card)             # False (não True = False)

(1) Tabela Verdade

a b a and b a or b not a
True True True True False
True False False True False
False True False True True
False False False False True

(2) Avaliação de Curto-Circuito

Os operadores lógicos do Python têm uma característica importante: avaliação de curto-circuito.

PYTHON
# Para and: se o lado esquerdo é False, o lado direito nunca é avaliado
def say_yes():
    print("say_yes foi chamada")
    return True

print(False and say_yes())   # Saída False — say_yes nunca executou
print(True and say_yes())    # Saída "say_yes foi chamada" e True

# Para or: se o lado esquerdo é True, o lado direito não é avaliado
print(True or say_yes())     # Saída True — say_yes nunca executou

Isso é muito útil na prática:

PYTHON
# Só obtém username se usuário existe — evita error None.get()
user = None
username = user and user.get("name")   # user é None (falsy), curto-circuito, username = None
print(username)                        # None

user = {"name": "João Silva"}
username = user and user.get("name")   # user é truthy, avalia lado direito, username = "João Silva"
print(username)                        # João Silva
💡 Dica: A avaliação de curto-circuito não só melhora o desempenho mas também previne erros. O padrão user and user.get("name") é comum em Python — ele garante "acesso seguro": se o lado esquerdo é falsy, retorna-o diretamente sem avaliar o lado direito potencialmente problemático.

▶ Exemplo: Verificar se um Número é "Especial" (Dificuldade ⭐⭐)

Combine operadores de comparação e lógicos para verificar se um número atende certas "condições especiais."

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Número: 49
No intervalo (10-99): True
Múltiplo de 7: True
Contém dígito 7: False
É especial: True

Número 200: primeira condição é False, segunda não executa — False


4. Operadores de Atribuição

Além do = básico, Python fornece operadores de atribuição compostos:

PYTHON
x = 10         # Atribuição básica
x += 3         # Equivalente a x = x + 3, resultado: 13
x -= 2         # Equivalente a x = x - 2, resultado: 11
x *= 2         # Equivalente a x = x * 2, resultado: 22
x /= 4         # Equivalente a x = x / 4, resultado: 5.5
x //= 2        # Equivalente a x = x // 2, resultado: 2.0
x %= 2         # Equivalente a x = x % 2, resultado: 0.0
x **= 3        # Equivalente a x = x ** 3, resultado: 0.0

Observe que x = 10 é um inteiro, mas após x /= 4 ele se torna 5.5 (float), porque / sempre retorna um float. Use //= se precisar de um resultado inteiro.

PYTHON
# Incremento típico em um laço
score = 0
score += 10      # Adiciona 10 pontos
score += 20      # Adiciona mais 20
score += 15      # Adiciona mais 15
print(f"Pontuação final: {score}")   # 45

# Strings também funcionam com atribuição composta
message = "Hello"
message += " "   # Adiciona um espaço
message += "World"
print(message)               # "Hello World"
💡 Dica: x += 1 é a forma do Python para "incrementar em 1." Outras linguagens escrevem x++. Python não tem operador ++; use += 1.



5. Operadores de String

Strings têm suas próprias "operações" — não exatamente matemáticas, mas usando os mesmos símbolos.

Operador Propósito Exemplo Resultado
+ Concatenação "Hello" + " " + "World" "Hello World"
* Repetição "Ha" * 3 "HaHaHa"
in Pertencimento "Py" in "Python" True
not in Não pertencimento "xyz" not in "Python" True
PYTHON
# Concatenação de strings
first_name = "João"
last_name = "Silva"
full_name = first_name + " " + last_name
print(full_name)              # Saída "João Silva"

# Repetição de strings — ótimo para desenhar linhas separadoras
line = "=" * 30
print(line)                   # Saída 30 sinais de igual

# Verificação de pertencimento (in / not in)
text = "Hello, Python!"
print("Python" in text)       # True — "Python" faz parte do texto
print("Java" in text)         # False — texto não contém "Java"
print("Java" not in text)     # True — de fato "não está lá"
⚠️ Observação: + funciona apenas entre duas strings, não entre string e número. "Age: " + 25 dará erro. Converta o número primeiro: "Age: " + str(25). * funciona apenas entre string e inteiro — "AB" * 3 funciona, "AB" * "CD" não.

▶ Exemplo: Gerar um Cartão de Visita com Operações de String (Dificuldade ⭐⭐)

TEXT 📖 Somente leitura
# Gera um cartão de visita simples usando operações de string

name = "João Silva"
title = "Engenheiro Python"
company = "Tech Co., Ltd."

# Concatena conteúdo do cartão com +
card_line1 = "Nome: " + name
card_line2 = "Cargo: " + title
card_line3 = "Empresa: " + company

# Gera separador com *
separator = "-" * 25

# Combina em cartão completo
business_card = separator + "\n" + card_line1 + "\n" + card_line2 + "\n" + card_line3 + "\n" + separator

print("Cartão de Visita Gerado:")
print(business_card)

# Verifica se contém informação específica com in
search_term = "Python"
print(f"\nO cartão contém \"{search_term}\"? {search_term in business_card}")

# Exclui certa informação com not in
print(f"Cartão não contém \"Gerente\": {\"Gerente\" not in business_card}")

Saída:

TEXT 📖 Somente leitura
Cartão de Visita Gerado:
-------------------------
Nome: João Silva
Cargo: Engenheiro Python
Empresa: Tech Co., Ltd.
-------------------------

O cartão contém "Python"? True
Cartão não contém "Gerente": True


6. Precedência de Operadores

Assim como a matemática tem "multiplicação antes de adição," Python tem precedência de operadores.

Prioridade Categoria Operadores Observações
Alta Exponenciação ** Associativo à direita
↓ Unário +x, -x, not Positivo/negativo, NÃO lógico
↓ Aritmético *, /, //, % Multiplicação, divisão, piso, módulo
↓ Aritmético +, - Adição, subtração
↓ Comparação ==, !=, >, <, >=, <= Comparações
↓ Lógico not NÃO lógico
↓ Lógico and E lógico
↓ Lógico or OU lógico
Baixa Atribuição =, +=, etc. Atribuição
PYTHON
# Multiplicação antes de adição
result = 2 + 3 * 4
print(result)                # 14 (3*4=12, depois +2)

# Comparação tem precedência menor que aritmética
print(2 + 3 * 4 > 10)        # True (14 > 10)

# Lógico tem a menor precedência — faça comparações primeiro, depois combine logicamente
age = 20
print(age > 18 and age < 60)  # True (primeiro age>18 e age<60, depois and)

# Exponenciação é associativa à direita
print(2 ** 3 ** 2)            # 512 (primeiro 3²=9, depois 2⁹=512)
print((2 ** 3) ** 2)          # 64 (com parênteses, primeiro 2³=8, depois 8²=64)

# Parênteses mudam a precedência — como na matemática
result = (2 + 3) * 4
print(result)                 # 20 (primeiro 2+3=5, depois ×4)

▶ Exemplo: Calculadora de Hipoteca (Dificuldade ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Valor do empréstimo: 1,000,000 reais
Taxa anual: 4.5%
Prazo: 30 anos
Pagamento mensal: 5,066.85 reais
Total a pagar: 1,824,066.95 reais
Total de juros: 824,066.95 reais
💡 Dica: Os sublinhados em 1_000_000 são apenas para legibilidade humana — Python os ignora. Este é um recurso do Python 3.6+ para separação visual de números. Não lembra a precedência? Use parênteses — a fórmula acima é clara para qualquer um com parênteses.



7. Problemas de Precisão de Ponto Flutuante

Todo programador encontra isso:

PYTHON
print(0.1 + 0.2)                     # Saída 0.30000000000000004
print(0.3)                           # Saída 0.3
print(0.1 + 0.2 == 0.3)              # Saída False ← não são iguais!

Isso não é um bug do Python — é uma limitação fundamental de armazenar floats em binário. Assim como decimal não pode representar precisamente 1/3 = 0.33333..., binário não pode representar precisamente 0.1.

(1) Quando se Preocupar

PYTHON
# Forma correta de comparar floats
result = 0.1 + 0.2
epsilon = 1e-10     # Um número muito pequeno, cerca de 0.0000000001
print(abs(result - 0.3) < epsilon)   # Saída True
PYTHON
print(f"{0.1 + 0.2:.2f}")   # Saída 0.30
PYTHON
# Exemplo real: somar 0.1 dez vezes
total = 0.0
for i in range(10):
    total += 0.1
print(f"Resultado acumulado: {total}")          # 0.9999999999999999
print(f"Exatamente 1.0: {total == 1.0}")          # False
print(f"Formatado: {total:.2f}")               # 1.00 — exibição é ok
⚠️ Observação: Para aprendizado diário, a precisão de ponto flutuante não afetará seu entendimento da lógica de programação. Apenas lembre-se de duas regras: "não use == para comparar floats diretamente" e "use o módulo decimal para dinheiro."



8. Conversão de Tipos Numéricos

Python fornece várias funções para converter entre tipos numéricos:

PYTHON
# int → float
print(float(3))             # Saída 3.0

# float → int (trunca em direção a zero, não arredonda)
print(int(3.14))            # Saída 3
print(int(-2.8))            # Saída -2 (truncamento em direção a zero)

# string → número (apenas se a string realmente representa um número)
print(int("42"))            # Saída 42
print(float("3.14"))        # Saída 3.14

# número → string
print(str(3.14))            # Saída "3.14"

# int() também pode especificar base
print(int("FF", 16))        # Saída 255 (hexadecimal FF para decimal)
print(int("1010", 2))       # Saída 10 (binário 1010 para decimal)

▶ Exemplo: Conversão de Tipo na Prática (Dificuldade ⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Você digitou: 25 (tipo: <class 'str'>)
Após conversão: 25 (tipo: <class 'int'>)
No próximo ano você terá 26 anos
Você tem 25 anos


9. Casos de Uso Comuns


Palavras-chave / Instruções relacionadas:input() float False True None

❓ Perguntas Frequentes

P Qual a diferença entre == e is? Quando devo usar cada um?
R == compara valores ("o conteúdo é o mesmo?"), is compara identidade ("são o mesmo objeto?"). Exemplo: a = [1, 2]; b = [1, 2]; c = a — a == b é True (mesmos valores), mas a is b é False (objetos lista diferentes); a is c é True (c é apenas um apelido). No desenvolvimento diário, 99% das vezes use ==. Para verificar None, a convenção é is: if result is None:.
P Quais armadilhas a avaliação de curto-circuito de and/or tem na prática?
R A armadilha mais comum: user_input = input() or "default" — se input() retornar uma string vazia (falsy), or faz curto-circuito e usa o padrão. Isso é comum mas pode ser confuso para iniciantes. Outra armadilha: colocar uma chamada de função no lado direito de and — se o lado esquerdo for falsy, a função não será executada, potencialmente pulando operações importantes. Boa prática: se a expressão da direita tem efeitos colaterais, não dependa do comportamento de curto-circuito; escreva declarações separadas.

P Quando devo usar / vs //?
R Se você precisa de um resultado decimal preciso (ex.: 7 ÷ 3 = 2,333...), use /. Se você só precisa de um resultado inteiro (ex.: dividir 7 maçãs entre 3 pessoas — 2 cada, sobra 1), use // com %. Se você é iniciante e não tem certeza, use / por padrão — pelo menos você não perderá precisão. Mude para // quando precisar especificamente de resultados inteiros.
P Por que o operador de exponenciação é associativo à direita?
R Em matemática, 2^3^2 é avaliado de cima para baixo: primeiro 3^2 = 9, depois 2^9 = 512. Python segue a mesma regra: 2 ^ 3 ^ 2 é analisado como 2 ^ (3 ^ 2). Se você avaliar da esquerda para a direita, obtém (2^3)^2 = 8^2 = 64, um resultado completamente diferente. Use parênteses para deixar sua intenção clara: (2 ^ 3) ^ 2 resulta em 64.

📖 Resumo



📝 Exercícios

  1. Básico (Dificuldade ⭐): Defina a=10, b=3, c=20. Calcule e exiba: a + b * c, (a + b) * c, a ** b, a // b, c % a, a > b and c > 15. Primeiro adivinhe os resultados, depois verifique.

  2. Intermediário (Dificuldade ⭐⭐): Dado year = 2026, determine se é um ano bissexto. Regra do ano bissexto: divisível por 4 mas não por 100, ou divisível por 400. Dica: year % 4 == 0 verifica divisibilidade por 4.

  3. Desafio (Dificuldade ⭐⭐⭐): Escreva um sistema simples de alarme de temperatura. Dado current_temp = 38, high_alarm = 37, low_alarm = 5. Dispare um alarme se a temperatura atual exceder o limite máximo ou cair abaixo do limite mínimo. Se a temperatura estiver próxima do limite (dentro de ±2 graus), emita um "aviso" em vez de "alarme." Use apenas operadores aritméticos, de comparação e lógicos. Dica: abs(current_temp - high_alarm) <= 2 verifica se está próximo do limite máximo.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%