Skip to content

Effortlessly Mastering Python's Mod Function

Python Modulo in Practice: How to Use the % Operator

by Jason Van Schooneveld

Python supports a wide range of arithmetic operators that you can use when working with numbers in your code. One of these operators is the modulo operator (%), which returns the remainder of dividing two numbers.

In this tutorial, you’ll learn:

  • How modulo works in mathematics
  • How to use the Python modulo operator with different numeric types
  • How Python calculates the results of a modulo operation
  • How to override .__mod__() in your classes to use them with the modulo operator
  • How to use the Python modulo operator to solve real-world problems

The Python modulo operator can sometimes be overlooked. But having a good understanding of this operator will give you an invaluable tool in your Python tool belt.

Modulo in Mathematics

The term modulo comes from a branch of mathematics called modular arithmetic. Modular arithmetic deals with integer arithmetic on a circular number line that has a fixed set of numbers. All arithmetic operations performed on this number line will wrap around when they reach a certain number called the modulus.

A classic example of modulo in modular arithmetic is the twelve-hour clock. A twelve-hour clock has a fixed set of values, from 1 to 12. When counting on a twelve-hour clock, you count up to the modulus 12 and then wrap back to 1. A twelve-hour clock can be classified as “modulo 12,” sometimes shortened to “mod 12.”

The modulo operator is used when you want to compare a number with the modulus and get the equivalent number constrained to the range of the modulus.

For example, say you want to determine what time it would be nine hours after 8:00 a.m. On a twelve-hour clock, you can’t simply add 9 to 8 because you would get 17. You need to take the result, 17, and use mod to get its equivalent value in a twelve-hour context:

8 o'clock + 9 = 17 o'clock
17 mod 12 = 5

17 mod 12 returns 5. This means that nine hours past 8:00 a.m. is 5:00 p.m. You determined this by taking the number 17 and applying it to a mod 12.

Python Modulo Operator Basics

Now that you understand how modulo works in mathematics, let’s dive into the basics of using the Python modulo operator. In Python, the modulo operator is represented by the percent sign (%).

Modulo Operator With int

When using the modulo operator with integers, it returns the remainder of the division operation. Here’s an example:

result = 17 % 5
print(result) # Output: 2

The result of 17 % 5 is 2 because 17 divided by 5 is 3 with a remainder of 2.

Modulo Operator With float

When using the modulo operator with floats, Python converts the float to an integer and performs the modulo operation with the integer values. Here’s an example:

result = 17.5 % 5.2
print(result) # Output: 2.1

The result of 17.5 % 5.2 is 2.1 because Python converts 17.5 to the integer 17 and performs the operation 17 % 5.2, which is 2 with a fractional part of 0.1.

Modulo Operator With a Negative Operand

When one of the operands of the modulo operator is negative, the sign of the remainder will depend on the sign of the dividend. Here’s an example:

result = -17 % 5
print(result) # Output: 3

The result of -17 % 5 is 3 because -17 divided by 5 is -3 with a remainder of 3. Since the dividend is negative, the sign of the remainder is also negative.

Modulo Operator and divmod()

The divmod() function in Python returns a tuple containing the quotient and remainder of the division operation. The modulo operator can be used in conjunction with the divmod() function to calculate the remainder directly. Here’s an example:

quotient, remainder = divmod(17, 5)
print(remainder) # Output: 2

The divmod(17, 5) returns a tuple (quotient, remainder) where the quotient is 3 and the remainder is 2. By assigning the tuple to two variables, quotient and remainder, you can access the remainder directly.

Modulo Operator Precedence

The modulo operator has higher precedence than the addition and subtraction operators but lower precedence than the multiplication, division, and exponentiation operators. This means that the modulo operation will be performed before addition and subtraction when multiple operators are used in an expression.

Python Modulo Operator in Practice

Now that you’re familiar with the basics of the Python modulo operator, let’s explore some practical examples of how to use it in real-world scenarios.

How to Check if a Number Is Even or Odd

You can use the modulo operator to determine if a number is even or odd. If a number modulo 2 is equal to 0, it means the number is even. Otherwise, it is odd. Here’s an example:

def is_even(number):
return number % 2 == 0
print(is_even(4)) # Output: True
print(is_even(7)) # Output: False

The is_even() function takes a number as an argument and checks if the number modulo 2 is equal to 0. If it is, the function returns True, indicating that the number is even. Otherwise, it returns False.

How to Run Code at Specific Intervals in a Loop

You can use the modulo operator to run code at specific intervals within a loop. By checking if the loop index modulo a number is equal to 0, you can execute a specific code block every x iterations. Here’s an example:

for i in range(10):
if i % 3 == 0:
print(f"Running code at index {i}")

In this example, the code inside the if statement will execute when the loop index i modulo 3 is equal to 0. This means that the code block will run at indices 0, 3, 6, and 9.

How to Create Cyclic Iteration

You can create a cycle of elements using the modulo operator and the length of a list. By index mod len(list), you can continuously access items in the list without going out of bounds. Here’s an example:

my_list = ["apple", "banana", "cherry"]
cycles = 5
for i in range(cycles):
print(f"{i}: {my_list[i % len(my_list)]}")

The for loop will iterate cycles times and use the modulo operator to access elements in my_list cyclically. The output will be:

0: apple
1: banana
2: cherry
3: apple
4: banana

How to Convert Units

You can use the modulo operator to convert units by calculating remainders and quotients. For example, to convert minutes into hours and minutes, you can use the modulo operator and the divmod() function. Here’s an example:

def convert_minutes(minutes):
hours, remainder = divmod(minutes, 60)
return f"{hours} hours, {remainder} minutes"
print(convert_minutes(135)) # Output: 2 hours, 15 minutes

The convert_minutes() function takes a number of minutes as an argument and uses divmod() to calculate the hours and minutes. The quotient from divmod() represents the hours, and the remainder represents the minutes.

How to Determine if a Number Is a Prime Number

You can use the modulo operator to determine if a number is a prime number. A prime number is a number greater than 1 that has no divisors other than 1 and itself. By checking if a number is divisible by any number between 2 and the square root of the number (inclusive), you can determine if it is prime. Here’s an example:

import math
def is_prime(number):
if number < 2:
return False
for i in range(2, int(math.sqrt(number)) + 1):
if number % i == 0:
return False
return True
print(is_prime(5)) # Output: True
print(is_prime(10)) # Output: False

The is_prime() function takes a number as an argument and checks if it is divisible by any number between 2 and the square root of the number. If it is divisible, it returns False, indicating that the number is not prime. Otherwise, it returns True.

How to Implement Ciphers

Ciphers, such as the Caesar Cipher, use the modulo operator to encrypt and decrypt messages. The modulo operator allows wrapping around the index of characters in the alphabet to shift them by a specific number. Here’s an example:

def caesar_cipher(message, shift):
result = ""
for char in message.upper():
if char in alphabet:
index = alphabet.index(char)
shifted_index = (index + shift) % len(alphabet)
result += alphabet[shifted_index]
result += char
return result
encrypted_message = caesar_cipher("HELLO WORLD", 3)
print(encrypted_message) # Output: KHOOR ZRUOG
decrypted_message = caesar_cipher(encrypted_message, -3)
print(decrypted_message) # Output: HELLO WORLD

The caesar_cipher() function takes a message and a shift value as arguments. It iterates through each character in the message, finds its index in the alphabet, applies the shift using the modulo operator, and retrieves the corresponding character from the alphabet. This process allows you to encrypt and decrypt messages using the Caesar Cipher.

Python Modulo Operator Advanced Uses

In addition to the basic uses of the Python modulo operator, there are advanced applications that can be explored.

Using the Python Modulo Operator With decimal.Decimal

The modulo operator can be used with the decimal.Decimal class from the decimal module to perform modulo calculations with precise decimal numbers. Here’s an example:

from decimal import Decimal
result = Decimal("10.5") % Decimal("3.2")
print(result) # Output: Decimal('1.7')

In this example, the modulo operator is used with decimal.Decimal objects to calculate the remainder of dividing 10.5 by 3.2 with precise decimal accuracy.

Using the Python Modulo Operator With Custom Classes

You can override the .__mod__() method in your custom classes to define how the modulo operator should behave when applied to instances of your class. By implementing this special method, you can customize the behavior of the modulo operator for your specific class. Here’s an example:

class MyNumber:
def __init__(self, value):
self.value = value
def __mod__(self, other):
return MyNumber(self.value % other.value)
a = MyNumber(10)
b = MyNumber(3)
result = a % b
print(result.value) # Output: 1

In this example, the MyNumber class defines a custom .__mod__() method that calculates the modulo operation between two instances of the MyNumber class.


The Python modulo operator provides a powerful tool for performing remainder calculations and solving various real-world problems. By understanding the basics and exploring advanced uses, you can leverage the power of the modulo operator in your Python programs.