Aprende a usar el operador módulo (%) en Python para resolver problemas reales: desde comprobar pares/impares hasta criptografía o estructuras de datos cíclicas.
El operador módulo (%) en Python es un operador aritmético fundamental que sirve para obtener el resto de una división. Aunque su concepto es sencillo, tiene un papel clave en muchas aplicaciones de programación. Desde comprobar si un número es par o impar hasta recorrer secuencias de forma cíclica o determinar años bisiestos, dominar el operador módulo mejora tu capacidad para resolver problemas en Python.
Entender el operador módulo es esencial porque aparece con frecuencia en:
Identificar números pares e impares
Recorrer elementos de forma cíclica
Implementar cálculos matemáticos con aritmética modular
Aplicaciones prácticas como cálculos de fechas, criptografía y lógica de juegos.
En este blog encontrarás una guía completa para usar el operador módulo en Python: sintaxis, comportamiento con distintos tipos numéricos, casos de uso y ejemplos prácticos. Si estás empezando con Python, te recomendamos nuestro curso Introduction to Python.
¿Qué es el operador módulo en Python?
El operador módulo (%) calcula el resto de la división entre dos números. Dados dos números, a (dividendo) y b (divisor), la operación módulo devuelve el resto cuando a se divide entre b.
Fundamento matemático
El módulo tiene su base en la aritmética modular, un sistema aritmético para enteros en el que los números "vuelven a empezar" al alcanzar un determinado valor (módulo). Se utiliza ampliamente en criptografía, hashing y cálculos cíclicos.
Piensa en un reloj de 12 horas: después de las 12, en lugar de seguir a 13, se vuelve a 1. Esto es, esencialmente, aritmética modular con módulo 12:
13 % 12 = 1, es decir, las 13 horas corresponden a la 1 en formato de 12 horas.
Sintaxis del módulo en Python y uso básico
En Python, la sintaxis del operador módulo es directa:
Al dividir 7 entre 3, obtenemos 2 con un resto de 1. El operador módulo devuelve ese resto. Del mismo modo, 15 dividido entre 4 da 3 con resto 3, y 20 entre 5 da exactamente 4 sin resto.
Trabajar con enteros
Ahora que ya entendemos lo básico, veamos cómo se comporta el operador módulo con enteros.
Módulo con enteros positivos
Trabajar con enteros positivos es el caso más sencillo para el operador módulo:
# Ejemplos con enteros positivosprint(10%3)print(25%7)print(100%10)Con la tecnología de
En estos ejemplos, calculamos cuántas veces cabe el divisor en el dividendo y qué sobra:
10 ÷ 3 = 3, resto 1; por tanto, 10 % 3 = 1
25 ÷ 7 = 3, resto 4; por tanto, 25 % 7 = 4
100 ÷ 10 = 10, resto 0; por tanto, 100 % 10 = 0
Módulo con enteros negativos
El comportamiento del operador módulo se vuelve más interesante con números negativos. Python sigue una regla específica: el resultado de a % b siempre tiene el mismo signo que b (el divisor).
# Ejemplos con enteros negativosprint(-10%3)print(10%-3)print(-10%-3)Con la tecnología de
Estos resultados pueden parecer contraintuitivos al principio, pero siguen una regla coherente:
Para -10 % 3: En lugar de -1 (que podría esperarse si piensas en -10 ÷ 3 = -3, resto -1), Python devuelve 2. Es porque Python busca un valor entre 0 y 3 (excluido) que, sumado a un múltiplo de 3, dé -10. La respuesta es 2, ya que -12 + 2 = -10.
Para 10 % -3: El resultado tiene el mismo signo que el divisor (-3), así que obtenemos -2. Porque 10 = (-3) × (-4) + (-2).
Para -10 % -3: El resultado es -1, ya que -10 = (-3) × 3 + (-1).
Comprender cómo maneja Python los números negativos en el módulo es crucial en cálculos cíclicos, como:
Implementar funciones de hashing
Resolver problemas de aritmética de reloj
Gestionar lógica de indexación negativa en listas
Uso del módulo con números de coma flotante
El operador módulo de Python no se limita a enteros; también funciona con números de coma flotante:
# Módulo con números de coma flotanteprint(7.5%2)print(9.7%4.2)print(5.0%0.2)Con la tecnología de
Con números en coma flotante, la operación módulo sigue el mismo principio: devuelve el resto tras la división. Sin embargo, por la forma en que se almacenan los flotantes en los ordenadores (formato IEEE 754), pueden aparecer pequeños errores de redondeo.
Por ejemplo, en lugar de 1.3, Python devuelve 1.299999999999999, y en lugar de 0.2, devuelve 0.19999999999999973. Estas pequeñas imprecisiones son habituales en la aritmética de coma flotante y hay que tenerlas en cuenta en cálculos muy precisos.
Python también ofrece la función math.fmod() del módulo math como alternativa para operaciones de módulo con flotantes, que puede manejar ciertos casos límite de forma diferente:
import math
print(math.fmod(7.5,2))print(math.fmod(-7.5,2))# Comparación con el operador módulo de Python print(-7.5%2)Con la tecnología de
La principal diferencia entre % y math.fmod() está en cómo tratan los números negativos. Mientras que % garantiza que el resultado tenga el mismo signo que el divisor y devuelve un valor en el rango [0, divisor), math.fmod() hace que el resultado tenga el mismo signo que el dividendo. Esta distinción es importante cuando el signo del resto importa.
Entonces, ¿cuándo usar % y cuándo math.fmod()?
Usa % cuando necesites un comportamiento de signo coherente (p. ej., al recorrer un rango).
Usa math.fmod() cuando deba preservarse el signo del dividendo, como en simulaciones físicas o funciones matemáticas.
Cómo manejar números negativos con el módulo en Python
Como hemos visto, la implementación de Python con números negativos puede no coincidir con la intuición inicial. Veamos este comportamiento de forma más sistemática:
# Entender el patrón con números negativosfor i inrange(-10,11):
result = i %3print(f"{i} % 3 = {result}")Con la tecnología de
-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=20%3=01%3=12%3=23%3=04%3=15%3=26%3=07%3=18%3=29%3=010%3=1Con la tecnología de
Fíjate en el patrón: los resultados se repiten 0 → 1 → 2 una y otra vez, tanto si el dividendo es positivo como negativo. Esta coherencia hace que el operador módulo sea especialmente útil en cálculos cíclicos, como:
Rotar índices en arrays o buffers circulares
Mapear valores en funciones periódicas (p. ej., cálculos basados en tiempo)
La fórmula matemática que sigue Python para el módulo es:
Reglas clave del comportamiento del módulo en Python:
Para divisores positivos (b > 0)
El resultado siempre está en el rango [0, b) (incluye 0 y excluye b).
Para divisores negativos (b < 0)
El resultado siempre está en el rango (b, 0] (excluye b e incluye 0).
El resto adopta el mismo signo que b (el divisor).
Funciona con enteros y con flotantes
Con números de coma flotante, % sigue la misma fórmula, pero puede introducir pequeños errores de redondeo por la precisión de los flotantes.
Diferencias entre % y math.fmod()
% garantiza que el resto tenga el mismo signo que el divisor.
math.fmod(a, b) garantiza que el resto tenga el mismo signo que el dividendo.
Casos de uso habituales del operador módulo
Veamos aplicaciones prácticas del operador módulo con más ejemplos.
Comprobar si un número es par o impar
Una de las aplicaciones más comunes del módulo es determinar si un número es par o impar:
defis_even(number):return number %2==0defis_odd(number):return number %2!=0# Probar las funciones
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")Con la tecnología de
1is odd
2is even
-3is odd
4is even
-5is odd
6is even
7is oddCon la tecnología de
Funciona porque los números pares dejan un resto de 0 al dividirse entre 2, mientras que los impares dejan un resto de 1 o -1.
Recorrer una secuencia de forma cíclica
El operador módulo es perfecto para crear comportamientos cíclicos, como rotar por una lista de elementos:
days =["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]defget_day(n):# Devuelve el día de la semana para el día n, donde el día 0 es Mondayreturn days[n %len(days)]# Empezando en Monday (día 0), ¿qué día será dentro de 10 días?print(get_day(10))# Output: "Thursday"# ¿Qué día fue hace 15 días desde Monday?print(get_day(-15))# Output: "Sunday"Con la tecnología de
En este ejemplo, por grande o pequeño (negativo) que sea n, la función siempre devolverá un día válido de la semana.
Cálculo de años bisiestos
Aunque el cálculo de años bisiestos implica varias condiciones, el operador módulo es central en el algoritmo:
Las reglas son:
Un año es bisiesto si es divisible por 4.
Pero si es divisible por 100, no es bisiesto.
A menos que también sea divisible por 400; en ese caso, sí es bisiesto.
defis_leap_year(year):return(year %4==0and year %100!=0)or(year %400==0)# Probar la función
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")Con la tecnología de
1900isnot a leap year
2000is a leap year
2004is a leap year
2020is a leap year
2023isnot a leap year
2024is a leap yearCon la tecnología de
Así nos aseguramos de aplicar correctamente las reglas del calendario gregoriano.
Ejemplos prácticos del módulo en Python
Aquí tienes algunas formas de usar el operador módulo en tus propios proyectos en Python:
Usar módulo en bucles
El operador módulo se usa a menudo en bucles para ejecutar acciones a intervalos regulares:
# Imprime un mensaje cada 5 iteracionesfor i inrange(1,11):print(f"Processing item {i}", end=": ")if i %5==0:print("Checkpoint reached!")else:print("Continuing...")Con la tecnología de
Este patrón es útil para procesar en lotes, informar del progreso o implementar cualquier funcionalidad periódica.
Módulo en aplicaciones reales
Hashing de contraseñas
En criptografía, la aritmética modular es fundamental. Este es un ejemplo simplificado de cómo podría usarse en una función de hashing básica:
defsimple_hash(text, modulus=1000000007):"""A very simple hash function using modulo."""
hash_value =0for char in text:# Combina el hash actual con el código Unicode del carácter
hash_value =(hash_value *31+ord(char))% modulus
return hash_value
# Pruebas con algunas cadenasprint(simple_hash("hello"))# Devuelve un número entre 0 y 1000000006print(simple_hash("world"))print(simple_hash("hello world"))print(simple_hash("こんにちは"))Con la tecnología de
Este es un ejemplo muy básico; el hashing criptográfico real es mucho más complejo. La operación módulo mantiene el valor del hash dentro de un rango manejable y ayuda a conservar buenas propiedades de dispersión.
Cálculo de horas en reloj
El módulo es útil para manejar cálculos de tiempo, como convertir muchas horas en formatos estándar.
defconvert_to_12_hour_format(hours):return hours %12or12# Asegura que 0 se mapea a 12# Ejemploprint(convert_to_12_hour_format(13))# Output: 1print(convert_to_12_hour_format(24))# Output: 12print(convert_to_12_hour_format(36))# Output: 12Con la tecnología de
Aquí, el operador módulo hace que las horas "den la vuelta" en un formato de 12 horas.
Desarrollo de juegos: sistema de turnos multijugador
En juegos por turnos multijugador, podemos usar el módulo para alternar entre jugadores.
players =["Alice","Bob","Charlie"]
turns =10for turn inrange(turns):
current_player = players[turn %len(players)]print(f"Turn {turn +1}: {current_player}'s move")Con la tecnología de
Muchos sistemas de códigos de barras usan operaciones de módulo para detectar errores en números escaneados.
defis_valid_isbn13(isbn):
digits =[int(d)for d instr(isbn)]
checksum =sum(d *(1if i %2==0else3)for i, d inenumerate(digits))return checksum %10==0# Ejemplos de validación de ISBNprint(is_valid_isbn13(9780306406157))# Output: Trueprint(is_valid_isbn13(9780306406158))# Output: FalseCon la tecnología de
El operador módulo es una herramienta versátil en el ecosistema de Python que va mucho más allá de calcular restos. Desde determinar pares/impares hasta implementar algoritmos con patrones cíclicos, el módulo permite soluciones más limpias y elegantes a numerosos retos de programación.
Si comprendes tanto su funcionamiento básico como sus matices con diferentes tipos numéricos, podrás aprovecharlo para escribir código más eficiente y legible. La próxima vez que necesites lógica con ciclos, rotaciones o eventos periódicos, recuerda que el operador módulo puede ser tu mejor aliado.
¿Cómo funciona el operador módulo con números negativos en Python?⌄
En Python, al usar el operador módulo con números negativos, el resultado tendrá el mismo signo que el divisor.
¿Se puede usar el operador módulo con números de coma flotante?⌄
Sí, el operador módulo funciona con números de coma flotante, pero ten en cuenta posibles pequeños errores de redondeo por la representación de los flotantes en los ordenadores.
¿Cómo se utiliza el operador módulo en aplicaciones reales?⌄
El operador módulo se usa en múltiples aplicaciones reales, como funciones de hashing, cálculos de tiempo en reloj y detección de errores como la validación de ISBN.
¿Por qué es importante el operador módulo en programación?⌄
El operador módulo es clave para resolver problemas con periodicidad, divisiones y vuelta al inicio, lo que lo convierte en una herramienta versátil para escribir código y diseñar algoritmos eficientes.
Como fundador de Martin Data Solutions y científico de datos autónomo, ingeniero de ML e IA, aporto una cartera diversa en Regresión, Clasificación, PNL, LLM, RAG, Redes Neuronales, Métodos de Ensemble y Visión por Ordenador.
Desarrolló con éxito varios proyectos de ML de extremo a extremo, incluyendo la limpieza de datos, análisis, modelado y despliegue en AWS y GCP, ofreciendo soluciones impactantes y escalables.
Construí aplicaciones web interactivas y escalables utilizando Streamlit y Gradio para diversos casos de uso de la industria.
Enseñó y tuteló a estudiantes en ciencia de datos y analítica, fomentando su crecimiento profesional mediante enfoques de aprendizaje personalizados.
Diseñó el contenido del curso para aplicaciones de generación aumentada por recuperación (RAG) adaptadas a los requisitos de la empresa.
Es autora de blogs técnicos de IA y ML de gran impacto, que tratan temas como MLOps, bases de datos vectoriales y LLMs, logrando un compromiso significativo.
En cada proyecto que asumo, me aseguro de aplicar prácticas actualizadas en ingeniería de software y DevOps, como CI/CD, code linting, formateo, monitorización de modelos, seguimiento de experimentos y una sólida gestión de errores. Me comprometo a ofrecer soluciones completas, convirtiendo los datos en estrategias prácticas que ayuden a las empresas a crecer y a sacar el máximo partido de la ciencia de datos, el aprendizaje automático y la IA.
Aprende a crear e importar módulos de Python. ¡Descubre las mejores prácticas, ejemplos y consejos para escribir código Python reutilizable, organizado y eficiente!
Elevar al cuadrado en Python es fácil: usa el operador ** integrado o prueba NumPy, pow(), math.pow(), operadores bit a bit y otras funciones para soluciones más versátiles.
Un tutorial introductorio completo sobre los bucles en Python. ¡Aprende y practica los bucles while y Bucle for, los bucles anidados, las palabras clave break y continue, la función range y mucho más!
Aprende a implementar la búsqueda binaria en Python utilizando enfoques iterativos y recursivos, y explora el módulo bisect integrado para obtener funciones de búsqueda binaria eficientes y preimplementadas.
El operador módulo (
%) en Python es un operador aritmético fundamental que sirve para obtener el resto de una división. Aunque su concepto es sencillo, tiene un papel clave en muchas aplicaciones de programación. Desde comprobar si un número es par o impar hasta recorrer secuencias de forma cíclica o determinar años bisiestos, dominar el operador módulo mejora tu capacidad para resolver problemas en Python.Entender el operador módulo es esencial porque aparece con frecuencia en:
En este blog encontrarás una guía completa para usar el operador módulo en Python: sintaxis, comportamiento con distintos tipos numéricos, casos de uso y ejemplos prácticos. Si estás empezando con Python, te recomendamos nuestro curso Introduction to Python.
¿Qué es el operador módulo en Python?
El operador módulo (
%) calcula el resto de la división entre dos números. Dados dos números,a(dividendo) yb(divisor), la operación módulo devuelve el resto cuandoase divide entreb.Fundamento matemático
El módulo tiene su base en la aritmética modular, un sistema aritmético para enteros en el que los números "vuelven a empezar" al alcanzar un determinado valor (módulo). Se utiliza ampliamente en criptografía, hashing y cálculos cíclicos.
Piensa en un reloj de 12 horas: después de las 12, en lugar de seguir a 13, se vuelve a 1. Esto es, esencialmente, aritmética modular con módulo 12:
13 % 12 = 1, es decir, las 13 horas corresponden a la 1 en formato de 12 horas.Sintaxis del módulo en Python y uso básico
En Python, la sintaxis del operador módulo es directa:
Veamos algunos ejemplos básicos:
Al dividir
7entre3, obtenemos2con un resto de1. El operador módulo devuelve ese resto. Del mismo modo,15dividido entre4da3con resto3, y20entre5da exactamente4sin resto.Trabajar con enteros
Ahora que ya entendemos lo básico, veamos cómo se comporta el operador módulo con enteros.
Módulo con enteros positivos
Trabajar con enteros positivos es el caso más sencillo para el operador módulo:
En estos ejemplos, calculamos cuántas veces cabe el divisor en el dividendo y qué sobra:
Módulo con enteros negativos
El comportamiento del operador módulo se vuelve más interesante con números negativos. Python sigue una regla específica: el resultado de
a % bsiempre tiene el mismo signo queb(el divisor).Estos resultados pueden parecer contraintuitivos al principio, pero siguen una regla coherente:
-10 % 3: En lugar de -1 (que podría esperarse si piensas en -10 ÷ 3 = -3, resto -1), Python devuelve 2. Es porque Python busca un valor entre 0 y 3 (excluido) que, sumado a un múltiplo de 3, dé -10. La respuesta es 2, ya que -12 + 2 = -10.10 % -3: El resultado tiene el mismo signo que el divisor (-3), así que obtenemos -2. Porque 10 = (-3) × (-4) + (-2).-10 % -3: El resultado es -1, ya que -10 = (-3) × 3 + (-1).Comprender cómo maneja Python los números negativos en el módulo es crucial en cálculos cíclicos, como:
Uso del módulo con números de coma flotante
El operador módulo de Python no se limita a enteros; también funciona con números de coma flotante:
Con números en coma flotante, la operación módulo sigue el mismo principio: devuelve el resto tras la división. Sin embargo, por la forma en que se almacenan los flotantes en los ordenadores (formato IEEE 754), pueden aparecer pequeños errores de redondeo.
Por ejemplo, en lugar de
1.3, Python devuelve1.299999999999999, y en lugar de0.2, devuelve0.19999999999999973. Estas pequeñas imprecisiones son habituales en la aritmética de coma flotante y hay que tenerlas en cuenta en cálculos muy precisos.Python también ofrece la función
math.fmod()del módulo math como alternativa para operaciones de módulo con flotantes, que puede manejar ciertos casos límite de forma diferente:La principal diferencia entre
%ymath.fmod()está en cómo tratan los números negativos. Mientras que%garantiza que el resultado tenga el mismo signo que el divisor y devuelve un valor en el rango [0, divisor),math.fmod()hace que el resultado tenga el mismo signo que el dividendo. Esta distinción es importante cuando el signo del resto importa.Entonces, ¿cuándo usar
%y cuándomath.fmod()?%cuando necesites un comportamiento de signo coherente (p. ej., al recorrer un rango).math.fmod()cuando deba preservarse el signo del dividendo, como en simulaciones físicas o funciones matemáticas.Cómo manejar números negativos con el módulo en Python
Como hemos visto, la implementación de Python con números negativos puede no coincidir con la intuición inicial. Veamos este comportamiento de forma más sistemática:
Fíjate en el patrón: los resultados se repiten
0 → 1 → 2una y otra vez, tanto si el dividendo es positivo como negativo. Esta coherencia hace que el operador módulo sea especialmente útil en cálculos cíclicos, como:La fórmula matemática que sigue Python para el módulo es:
Esto garantiza que el resultado esté siempre entre
0yb(excluido) cuandobes positivo, o entreby0(excluido) cuandobes negativo.Resumen del operador módulo en Python
El operador módulo (
%) en Python calcula el resto de una división. Sigue una fórmula matemática consistente:Reglas clave del comportamiento del módulo en Python:
b > 0)[0, b)(incluye 0 y excluyeb).b < 0)(b, 0](excluyebe incluye0).b(el divisor).%sigue la misma fórmula, pero puede introducir pequeños errores de redondeo por la precisión de los flotantes.%ymath.fmod()%garantiza que el resto tenga el mismo signo que el divisor.math.fmod(a, b)garantiza que el resto tenga el mismo signo que el dividendo.Casos de uso habituales del operador módulo
Veamos aplicaciones prácticas del operador módulo con más ejemplos.
Comprobar si un número es par o impar
Una de las aplicaciones más comunes del módulo es determinar si un número es par o impar:
Funciona porque los números pares dejan un resto de
0al dividirse entre2, mientras que los impares dejan un resto de1o-1.Recorrer una secuencia de forma cíclica
El operador módulo es perfecto para crear comportamientos cíclicos, como rotar por una lista de elementos:
En este ejemplo, por grande o pequeño (negativo) que sea n, la función siempre devolverá un día válido de la semana.
Cálculo de años bisiestos
Aunque el cálculo de años bisiestos implica varias condiciones, el operador módulo es central en el algoritmo:
Las reglas son:
Así nos aseguramos de aplicar correctamente las reglas del calendario gregoriano.
Ejemplos prácticos del módulo en Python
Aquí tienes algunas formas de usar el operador módulo en tus propios proyectos en Python:
Usar módulo en bucles
El operador módulo se usa a menudo en bucles para ejecutar acciones a intervalos regulares:
Este patrón es útil para procesar en lotes, informar del progreso o implementar cualquier funcionalidad periódica.
Módulo en aplicaciones reales
Hashing de contraseñas
En criptografía, la aritmética modular es fundamental. Este es un ejemplo simplificado de cómo podría usarse en una función de hashing básica:
Este es un ejemplo muy básico; el hashing criptográfico real es mucho más complejo. La operación módulo mantiene el valor del hash dentro de un rango manejable y ayuda a conservar buenas propiedades de dispersión.
Cálculo de horas en reloj
El módulo es útil para manejar cálculos de tiempo, como convertir muchas horas en formatos estándar.
Aquí, el operador módulo hace que las horas "den la vuelta" en un formato de 12 horas.
Desarrollo de juegos: sistema de turnos multijugador
En juegos por turnos multijugador, podemos usar el módulo para alternar entre jugadores.
Validación de dígitos en códigos de barras
Muchos sistemas de códigos de barras usan operaciones de módulo para detectar errores en números escaneados.
Conclusión
El operador módulo es una herramienta versátil en el ecosistema de Python que va mucho más allá de calcular restos. Desde determinar pares/impares hasta implementar algoritmos con patrones cíclicos, el módulo permite soluciones más limpias y elegantes a numerosos retos de programación.
Si comprendes tanto su funcionamiento básico como sus matices con diferentes tipos numéricos, podrás aprovecharlo para escribir código más eficiente y legible. La próxima vez que necesites lógica con ciclos, rotaciones o eventos periódicos, recuerda que el operador módulo puede ser tu mejor aliado.
Si quieres aprender más sobre cómo usar Python en tus proyectos, echa un vistazo a nuestro curso interactivo Introduction to Data Science in Python.