Pular para o conteúdo principal

Operador módulo em Python: entendendo os conceitos essenciais

Aprenda a usar o operador módulo (%) em Python para resolver problemas reais — de pares/ímpares a criptografia e estruturas de dados cíclicas.
Atualizado 17 de set. de 2026  · 9 min lido

Explorar com IA

ChatGPTClaudePerplexity

O operador módulo (%) em Python é um operador aritmético fundamental usado para determinar o resto de uma divisão. Apesar de simples, ele tem um papel essencial em várias aplicações de programação. De verificar se um número é par ou ímpar a percorrer sequências ciclicamente e determinar anos bissextos, dominar o operador módulo pode elevar suas habilidades de resolução de problemas em Python.

Entender o operador módulo é importante porque ele aparece com frequência em:

  • Identificação de números pares e ímpares
  • Iteração cíclica por elementos
  • Implementação de cálculos em aritmética modular
  • Casos práticos como cálculos de datas, criptografia e lógica de jogos.

Neste blog, vou trazer um guia completo do uso do operador módulo em Python, abordando sintaxe, comportamento com diferentes tipos numéricos, casos de uso e exemplos práticos. Se você está começando em Python, considere fazer nosso curso Introduction to Python

O que é o operador módulo em Python?

O operador módulo (%) calcula o resto da divisão entre dois números. Dado a (dividendo) e b (divisor), a operação retorna o resto quando a é dividido por b.

Fundamento matemático

O módulo tem origem na aritmética modular, um sistema de aritmética para inteiros em que os números “voltaram ao início” após atingir um certo valor (módulo). É amplamente usado em criptografia, hashing e computações cíclicas.

Pense em um relógio de 12 horas: depois de 12, em vez de ir para 13, voltamos ao 1. Essencialmente, isso é aritmética modular com módulo 12:

  • 13 % 12 = 1, ou seja, 13 horas correspondem a 1 hora em um formato de 12 horas.

Sintaxe e uso básico do módulo em Python

Em Python, a sintaxe do operador módulo é direta:

remainder = dividend % divisor

Vamos ver alguns exemplos básicos:

# Operações básicas com módulo
print(7 % 3)     
print(15 % 4)   
print(20 % 5)  
1 
3 
0 

Ao dividir 7 por 3, obtemos 2 com resto 1. O operador módulo nos dá esse resto. Da mesma forma, 15 dividido por 43 com resto 3, e 20 dividido por 5 dá exatamente 4 sem resto.

Trabalhando com inteiros

Agora que entendemos o básico do operador módulo, vamos ver como ele se comporta com inteiros.

Módulo com inteiros positivos

Trabalhar com inteiros positivos é o caso de uso mais direto do operador módulo:

# Exemplos com inteiros positivos
print(10 % 3)      
print(25 % 7)     
print(100 % 10)  
1 
4 
0 

Nestes exemplos, calculamos os resultados vendo quantas vezes o divisor “cabe” no dividendo e, depois, o que sobra:

  • 10 ÷ 3 = 3 resto 1, então 10 % 3 = 1
  • 25 ÷ 7 = 3 resto 4, então 25 % 7 = 4
  • 100 ÷ 10 = 10 resto 0, então 100 % 10 = 0

Módulo com inteiros negativos

O comportamento do operador módulo fica mais interessante com números negativos. Python segue uma regra específica: o resultado de a % b sempre tem o mesmo sinal que b (o divisor).

# Exemplos com inteiros negativos
print(-10 % 3)    
print(10 % -3)    
print(-10 % -3) 
2 
-2 
-1 

Esses resultados podem parecer contraintuitivos no início, mas seguem uma regra consistente:

  1. Para -10 % 3: em vez de -1 (pensando em -10 ÷ 3 = -3 resto -1), Python retorna 2. Isso porque o Python busca um valor entre 0 e 3 (exclusivo) que, somado a um múltiplo de 3, resulte em -10. A resposta é 2, pois -12 + 2 = -10.
  2. Para 10 % -3: o resultado tem o mesmo sinal do divisor (-3), portanto -2. Pois 10 = (-3) × (-4) + (-2).
  3. Para -10 % -3: o resultado é -1, pois -10 = (-3) × 3 + (-1).

Entender como o Python lida com negativos no módulo é crucial em computações cíclicas, como:

  • Implementação de funções de hashing
  • Problemas envolvendo aritmética de relógio
  • Tratamento de lógica de indexação negativa em listas

Usando módulo com números de ponto flutuante

O operador módulo do Python não se limita a inteiros; ele também funciona com números de ponto flutuante:

# Módulo com números de ponto flutuante
print(7.5 % 2)     
print(9.7 % 4.2)  
print(5.0 % 0.2)  
1.5
1.299999999999999
0.19999999999999973

Com floats, a operação segue o mesmo princípio: retorna o resto após a divisão. Porém, devido à forma como floats são armazenados nos computadores (formato IEEE 754), podem ocorrer pequenos erros de arredondamento.

Por exemplo, em vez de 1.3, o Python retorna 1.299999999999999, e em vez de 0.2, retorna 0.19999999999999973. Essas pequenas imprecisões são comuns em aritmética de ponto flutuante e devem ser consideradas em cálculos que exigem alta precisão.

O Python também oferece a função math.fmod() do módulo math como alternativa para operações de módulo com floats, que pode tratar alguns casos de borda de forma diferente:

import math

print(math.fmod(7.5, 2))    
print(math.fmod(-7.5, 2))  

# Comparando com o operador módulo do Python 
print(-7.5 % 2) 
1.5
-1.5
0.5

A principal diferença entre % e math.fmod() está em como lidam com números negativos. Enquanto % garante que o resultado tenha o mesmo sinal do divisor e retorne um valor no intervalo [0, divisor), math.fmod() garante que o resultado tenha o mesmo sinal do dividendo. Essa distinção é importante em aplicações em que o sinal do resto faz diferença.

Então, quando usar % e quando usar math.fmod()?

  • Use % quando você precisa de um comportamento consistente de sinal (por exemplo, para percorrer um intervalo).
  • Use math.fmod() quando o sinal do dividendo precisa ser preservado, como em simulações físicas ou funções matemáticas.

Tratando números negativos no módulo em Python

Como vimos, a implementação do módulo com números negativos em Python pode fugir da intuição inicial. Vamos explorar esse comportamento de forma mais sistemática:

# Entendendo o padrão com números negativos
for i in range(-10, 11):
    result = i % 3
    print(f"{i} % 3 = {result}")
-10 % 3 = 2
-9 % 3 = 0
-8 % 3 = 1
-7 % 3 = 2
-6 % 3 = 0
-5 % 3 = 1
-4 % 3 = 2
-3 % 3 = 0
-2 % 3 = 1
-1 % 3 = 2
0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0
7 % 3 = 1
8 % 3 = 2
9 % 3 = 0
10 % 3 = 1

Perceba o padrão: os resultados se repetem em 0 → 1 → 2, independentemente de o dividendo ser positivo ou negativo. Esse comportamento consistente torna o operador módulo especialmente útil em computações cíclicas, como:

  • Rotacionar índices em arrays ou buffers circulares
  • Mapear valores em funções periódicas (por exemplo, cálculos baseados em tempo)

A fórmula matemática que o Python segue para o módulo é:

Import math 

a % b = a - (b * math.floor(a / b))

Isso garante que o resultado esteja sempre entre 0 e b (exclusivo) quando b é positivo, ou entre b e 0 (exclusivo) quando b é negativo.

Resumo do operador módulo em Python

O operador módulo (%) em Python calcula o resto de uma divisão. Ele segue uma fórmula matemática consistente:

a % b = a - (b * math.floor(a / b))

Regras-chave do comportamento do módulo em Python:

  1. Para divisores positivos (b > 0)
    • O resultado está sempre no intervalo [0, b) (inclusivo em 0, exclusivo em b).
  2. Para divisores negativos (b < 0)
    • O resultado está sempre no intervalo (b, 0] (exclusivo em b, inclusivo em 0).
    • O resto adota o mesmo sinal de b (o divisor).
  3. Funciona com inteiros e floats
    • Para números de ponto flutuante, % segue a mesma fórmula, mas pode introduzir pequenos erros de arredondamento devido à precisão de floats.
  4. Diferença entre % e math.fmod()
    • % garante que o resto tenha o mesmo sinal do divisor.
    • math.fmod(a, b) garante que o resto tenha o mesmo sinal do dividendo.

Casos de uso comuns do operador módulo

Vamos ver algumas aplicações práticas do operador módulo e conferir mais exemplos. 

Verificando se um número é par ou ímpar

Um dos usos mais comuns do operador módulo é determinar se um número é par ou ímpar:

def is_even(number):
    return number % 2 == 0

def is_odd(number):
    return number % 2 != 0

# Testando as funções
numbers = [1, 2, -3, 4, -5, 6, 7]
for num in numbers:
    if is_even(num):
        print(f"{num} is even")
    else:
        print(f"{num} is odd")
1 is odd
2 is even
-3 is odd
4 is even
-5 is odd
6 is even
7 is odd

Isso funciona porque números pares deixam resto 0 quando divididos por 2, enquanto números ímpares deixam resto 1 ou -1.

Percorrendo uma sequência ciclicamente

O operador módulo é perfeito para criar comportamento cíclico, como rodar uma lista de itens:

days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

def get_day(n):
    # Obtém o dia da semana para o enésimo dia, onde o dia 0 é Monday
    return days[n % len(days)]

# Começando em Monday (dia 0), que dia será depois de 10 dias?
print(get_day(10))  # Output: "Thursday"

# Que dia foi há 15 dias a partir de Monday?
print(get_day(-15))  # Output: "Sunday"
Thursday
Sunday

Neste exemplo, não importa o quão grande ou pequeno (negativo) seja n, a função sempre retorna um dia válido da semana.

Cálculo de ano bissexto

Embora o cálculo de anos bissextos envolva múltiplas condições, o operador módulo é central no algoritmo:

Anos bissextos seguem esta regra:

  • Um ano é bissexto se for divisível por 4.
  • Mas, se for divisível por 100, não é bissexto.
  • Exceto se também for divisível por 400; nesse caso, é bissexto.
def is_leap_year(year):

    return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

# Testando a função
years = [1900, 2000, 2004, 2020, 2023, 2024]
for year in years:
    if is_leap_year(year):
        print(f"{year} is a leap year")
    else:
        print(f"{year} is not a leap year")
1900 is not a leap year
2000 is a leap year
2004 is a leap year
2020 is a leap year
2023 is not a leap year
2024 is a leap year

Isso garante que as regras do calendário gregoriano para anos bissextos sejam aplicadas corretamente.

Exemplos práticos de módulo em Python

Veja algumas maneiras de usar o operador módulo nos seus projetos em Python

Usando módulo em loops

O operador módulo é frequentemente usado em loops para realizar ações em intervalos regulares:

# Imprime uma mensagem a cada 5 iterações
for i in range(1, 11):
    print(f"Processing item {i}", end=": ")
    if i % 5 == 0:
        print("Checkpoint reached!")
    else:
        print("Continuing...")
Processing item 1: Continuing...
Processing item 2: Continuing...
Processing item 3: Continuing...
Processing item 4: Continuing...
Processing item 5: Checkpoint reached!
Processing item 6: Continuing...
Processing item 7: Continuing...
Processing item 8: Continuing...
Processing item 9: Continuing...
Processing item 10: Checkpoint reached!

Esse padrão é útil para processamento em lotes, relatórios de progresso ou qualquer funcionalidade que precise ocorrer periodicamente.

Módulo em aplicações do mundo real

Hashing de senhas

Em criptografia, a aritmética modular é fundamental. Aqui vai um exemplo simplificado de como o módulo pode ser usado em uma função básica de hashing:

def simple_hash(text, modulus=1000000007):
    """A very simple hash function using modulo."""
    hash_value = 0
    for char in text:
        # Combine the current hash with the character's Unicode code point
        hash_value = (hash_value * 31 + ord(char)) % modulus
    return hash_value

# Test with some strings
print(simple_hash("hello"))  # Output a number between 0 and 1000000006
print(simple_hash("world"))
print(simple_hash("hello world"))
print(simple_hash("こんにちは"))  
99162322
113318802
204910434
807637228

Este é um exemplo bem básico — hashing criptográfico real é muito mais complexo. A operação de módulo garante que o valor do hash permaneça em um intervalo manejável, preservando propriedades desejáveis de uma boa função de hash.

Cálculo de horário

O módulo é útil em cálculos de tempo, como converter um número grande de horas para formatos padrão.

def convert_to_12_hour_format(hours):
    return hours % 12 or 12  # Ensure 0 maps to 12

# Example
print(convert_to_12_hour_format(13))  # Output: 1
print(convert_to_12_hour_format(24))  # Output: 12
print(convert_to_12_hour_format(36))  # Output: 12

Aqui, o operador módulo faz o “loop” das horas em um formato de 12 horas.

Desenvolvimento de jogos: sistema de turnos multiplayer

Em jogos por turnos com vários jogadores, podemos usar módulo para alternar entre os jogadores.

players = ["Alice", "Bob", "Charlie"]
turns = 10

for turn in range(turns):
      current_player = players[turn % len(players)]
      print(f"Turn {turn + 1}: {current_player}'s move")
Turn 1: Alice's move
Turn 2: Bob's move
Turn 3: Charlie's move
Turn 4: Alice's move
Turn 5: Bob's move
Turn 6: Charlie's move
Turn 7: Alice's move
Turn 8: Bob's move
Turn 9: Charlie's move
Turn 10: Alice's move

Validação de dígitos em códigos de barras

Muitos sistemas de código de barras usam operações de módulo para detectar erros em números lidos.

def is_valid_isbn13(isbn):
    digits = [int(d) for d in str(isbn)]
    checksum = sum(d * (1 if i % 2 == 0 else 3) for i, d in enumerate(digits))
    return checksum % 10 == 0

# Exemplo de validação de checksum de ISBN
print(is_valid_isbn13(9780306406157))  # Output: True
print(is_valid_isbn13(9780306406158))  # Output: False
True
False

Conclusão

O operador módulo é uma ferramenta versátil no ecossistema do Python que vai muito além de calcular restos. De identificar números pares/ímpares a implementar algoritmos com padrões cíclicos, o módulo permite soluções mais limpas e elegantes para diversos desafios de programação.

Ao entender tanto a funcionalidade básica quanto as nuances com diferentes tipos numéricos, você consegue aproveitar o operador módulo para escrever código mais eficiente e legível. Na próxima vez que precisar de lógica envolvendo ciclos, rotações ou eventos periódicos, lembre-se: o operador módulo pode ser a solução ideal.

Se você quer aprender mais sobre como usar Python nos seus projetos, confira nosso curso interativo Introduction to Data Science in Python

FAQs sobre módulo em Python

Como o operador módulo funciona com números negativos em Python?

Em Python, ao usar o operador módulo com números negativos, o resultado terá o mesmo sinal do divisor.

O operador módulo pode ser usado com números de ponto flutuante?

Sim, o operador módulo funciona com números de ponto flutuante, mas fique atento a pequenos erros de arredondamento devido à forma como os floats são representados nos computadores.

Como o operador módulo é usado em aplicações reais?

O operador módulo é usado em várias aplicações práticas, como funções de hashing, cálculos de horário e detecção de erros, como na validação de ISBN.

Por que o operador módulo é importante na programação?

O operador módulo é essencial para resolver problemas que envolvem periodicidade, divisão e “voltar ao início”, tornando-se uma ferramenta versátil para código eficiente e design de algoritmos.


Benito Martin's photo
Author
Benito Martin
LinkedIn

Como fundador da Martin Data Solutions e cientista de dados freelancer, engenheiro de ML e IA, tenho um portfólio diversificado em regressão, classificação, PNL, LLM, RAG, redes neurais, métodos de conjunto e visão computacional.

  • Desenvolveu com sucesso vários projetos de ML de ponta a ponta, incluindo limpeza de dados, análise, modelagem e implantação no AWS e no GCP, fornecendo soluções impactantes e dimensionáveis.
  • Criou aplicativos da Web interativos e dimensionáveis usando Streamlit e Gradio para diversos casos de uso do setor.
  • Ensinou e orientou alunos em ciência e análise de dados, promovendo seu crescimento profissional por meio de abordagens de aprendizagem personalizadas.
  • Projetou o conteúdo do curso para aplicativos RAG (retrieval-augmented generation) adaptados aos requisitos da empresa.
  • Criou blogs técnicos de IA e ML de alto impacto, abordando tópicos como MLOps, bancos de dados vetoriais e LLMs, obtendo um envolvimento significativo.

Em cada projeto que assumo, certifico-me de aplicar práticas atualizadas em engenharia de software e DevOps, como CI/CD, code linting, formatação, monitoramento de modelos, rastreamento de experimentos e tratamento robusto de erros. Tenho o compromisso de fornecer soluções completas, transformando insights de dados em estratégias práticas que ajudam as empresas a crescer e tirar o máximo proveito da ciência de dados, do machine learning e da IA.

Tópicos
Python

Os melhores cursos de Python

Programa

Fundamentos de dados Python

28 h
Aumente suas habilidades com dados, descubra como manipular e visualizar dados e aplique análises avançadas para tomar decisões orientadas por dados.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

Tutorial

Operadores em Python

Este tutorial aborda os diferentes tipos de operadores em Python, sobrecarga de operadores, precedência e associatividade.
Théo Vanderheyden's photo

Théo Vanderheyden

9 min

Tutorial

Operador da morsa do Python: A expressão de atribuição (Tutorial)

O operador de morsa do Python := permite que você atribua um valor a uma variável dentro de uma expressão, combinando atribuição e uso em uma única etapa.
Stephen Gruppetta's photo

Stephen Gruppetta

8 min

Tutorial

30 truques de Python para escrever um código melhor (com exemplos)

Selecionamos 30 truques de Python para você melhorar seu código e desenvolver suas habilidades em Python.
Kurtis Pykes 's photo

Kurtis Pykes

15 min

Tutorial

Como calcular o quadrado de um número em Python: métodos básicos e avançados

Elevar ao quadrado em Python é fácil: use o operador ** nativo ou experimente NumPy, pow(), math.pow(), operadores bitwise e outras funções para soluções mais versáteis.
Allan Ouko's photo

Allan Ouko

11 min

Tutorial

Tutorial de conjuntos e teoria de conjuntos em Python

Aprenda sobre os conjuntos do Python: o que são, como criá-los, quando usá-los, funções incorporadas e sua relação com as operações da teoria dos conjuntos.
DataCamp Team's photo

DataCamp Team

13 min

Tutorial

Sequência de Fibonacci em Python: Aprenda e explore técnicas de programação

Descubra como funciona a sequência de Fibonacci. Explore suas propriedades matemáticas e aplicações no mundo real.
Laiba Siddiqui's photo

Laiba Siddiqui

6 min

Ver MaisVer Mais