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.
Actualizado 17 de set. de 2026  · 9 min leer

Explore 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 4 dá 3 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.

Temas
Python

Os melhores cursos de Python

{count, plural, one {Programa} other {Programas}}

Fundamentos de dados Python

{hours} 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
Começar Curso
Ver maisRight Arrow
Relacionado

{count, plural, one {Tutorial} other {Tutoriais}}

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

{count, plural, one {Tutorial} other {Tutoriais}}

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

{count, plural, one {Tutorial} other {Tutoriais}}

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

{count, plural, one {Tutorial} other {Tutoriais}}

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

{count, plural, one {Tutorial} other {Tutoriais}}

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

{count, plural, one {Tutorial} other {Tutoriais}}

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