Ga naar hoofdinhoud

Modulo-operator in Python: de belangrijkste concepten uitgelegd

Leer hoe je de modulo-operator (%) in Python gebruikt om realistische problemen op te lossen, van even/oneven-controles tot cryptografie en cyclische datastructuren.
Bijgewerkt 2 okt 2026  · 9 min lezen

Verken met AI

ChatGPTClaudePerplexity

De modulo-operator (%) in Python is een fundamentele rekenkundige operator die de rest bepaalt van een deling. Hoewel het concept eenvoudig is, speelt het een cruciale rol in uiteenlopende programmeer-toepassingen. Van controleren of een getal even of oneven is tot door reeksen fietsen en schrikkeljaren bepalen: het beheersen van de modulo-operator kan je probleemoplossend vermogen in Python vergroten.

De modulo-operator begrijpen is essentieel omdat die vaak voorkomt bij:

  • Het identificeren van even en oneven getallen
  • Elementen cyclisch doorlopen
  • Wiskundige berekeningen in modulaire rekenkunde
  • Praktische toepassingen zoals datumcalculaties, cryptografie en game-logica.

In deze blog geef ik een uitgebreide gids voor het gebruik van de modulo-operator in Python, met de syntax, het gedrag met verschillende soorten getallen, use-cases en praktische voorbeelden. Ben je nieuw in Python? Volg dan onze cursus Introduction to Python. 

Wat is de modulo-operator in Python?

De modulo-operator (%) berekent de rest van de deling tussen twee getallen. Gegeven twee getallen a (deeltal) en b (deler), geeft de modulo-bewerking de rest terug wanneer a door b wordt gedeeld.

Wiskundige achtergrond

Modulo vindt zijn oorsprong in modulaire rekenkunde, een rekenstelsel voor gehele getallen waarbij getallen "omslag" maken nadat ze een bepaalde waarde (modulus) hebben bereikt. Het wordt veel gebruikt in cryptografie, hashing en cyclische berekeningen.

Denk aan een 12-uursklok: na 12 gaan we niet door naar 13, maar terug naar 1. Dit is in essentie modulaire rekenkunde met modulus 12:

  • 13 % 12 = 1, wat betekent dat 13 uur overeenkomt met 1 uur in een 12-uursindeling.

Python-modulo: syntax en basisgebruik

In Python heeft de modulo-operator een eenvoudige syntax:

remainder = dividend % divisor

Laten we een paar basisvoorbeelden bekijken:

# Basic modulo operations
print(7 % 3)     
print(15 % 4)   
print(20 % 5)  
1 
3 
0 

Als we 7 delen door 3, krijgen we 2 met rest 1. De modulo-operator geeft ons die rest. Op dezelfde manier geeft 15 gedeeld door 4 3 met rest 3, en 20 gedeeld door 5 geeft precies 4 zonder rest.

Werken met gehele getallen

Nu we de basis van de modulo-operator begrijpen, bekijken we hoe die zich gedraagt bij gehele getallen.

Modulo met positieve gehele getallen

Werken met positieve gehele getallen is de meest rechttoe-rechtaan toepassing van de modulo-operator:

# Examples with positive integers
print(10 % 3)      
print(25 % 7)     
print(100 % 10)  
1 
4 
0 

In deze voorbeelden berekenen we de uitkomsten door te bepalen hoe vaak de deler in het deeltal past en vervolgens te kijken wat er overblijft:

  • 10 ÷ 3 = 3 rest 1, dus 10 % 3 = 1
  • 25 ÷ 7 = 3 rest 4, dus 25 % 7 = 4
  • 100 ÷ 10 = 10 rest 0, dus 100 % 10 = 0

Modulo met negatieve gehele getallen

Het gedrag van de modulo-operator wordt interessanter bij negatieve getallen. Python volgt een specifieke regel: de uitkomst van a % b heeft altijd hetzelfde teken als b (de deler).

# Examples with negative integers
print(-10 % 3)    
print(10 % -3)    
print(-10 % -3) 
2 
-2 
-1 

Deze resultaten lijken in eerste instantie misschien niet intuïtief, maar ze volgen een consistente regel:

  1. Voor -10 % 3: In plaats van -1 (wat je misschien verwacht als je denkt aan -10 ÷ 3 = -3 rest -1), geeft Python 2 terug. Dit komt doordat Python zoekt naar een waarde tussen 0 en 3 (exclusief) die, opgeteld bij een veelvoud van 3, -10 oplevert. Het antwoord is 2, want -12 + 2 = -10.
  2. Voor 10 % -3: De uitkomst heeft hetzelfde teken als de deler (-3), dus we krijgen -2. Dit komt doordat 10 = (-3) × (-4) + (-2).
  3. Voor -10 % -3: De uitkomst is -1, want -10 = (-3) × 3 + (-1).

Begrijpen hoe Python negatieve getallen behandelt bij modulo-bewerkingen is cruciaal bij cyclische berekeningen, zoals:

  • Het implementeren van hashingfuncties
  • Problemen oplossen met klokrekenkunde
  • Negatieve indexeringslogica in lijsten afhandelen

Modulo gebruiken met kommagetallen

De modulo-operator in Python is niet beperkt tot gehele getallen; hij werkt ook met drijvende-kommagetallen:

# Modulo with floating-point numbers
print(7.5 % 2)     
print(9.7 % 4.2)  
print(5.0 % 0.2)  
1.5
1.299999999999999
0.19999999999999973

Bij kommagetallen volgt de modulo-bewerking hetzelfde principe: hij geeft de rest na deling. Door de manier waarop kommagetallen in computers worden opgeslagen (IEEE 754-formaat) kunnen er echter kleine afrondingsfouten optreden.

Zo geeft Python in plaats van 1.3 1.299999999999999 terug, en in plaats van 0.2 0.19999999999999973. Deze kleine onnauwkeurigheden zijn gebruikelijk in kommagetalaritmetiek en moet je meenemen bij nauwkeurige berekeningen.

Python biedt ook de functie math.fmod() uit de math-module als alternatief voor modulo-bewerkingen met kommagetallen; die kan bepaalde randgevallen anders afhandelen:

import math

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

# Compare with Python's modulo operator 
print(-7.5 % 2) 
1.5
-1.5
0.5

Het belangrijkste verschil tussen % en math.fmod() zit in de behandeling van negatieve getallen. Waar % garandeert dat het resultaat hetzelfde teken heeft als de deler en een waarde teruggeeft in het bereik [0, deler), zorgt math.fmod() ervoor dat het resultaat hetzelfde teken heeft als het deeltal. Dit onderscheid is belangrijk in toepassingen waarbij het teken van de rest ertoe doet.

Wanneer gebruik je nu % en wanneer math.fmod()?

  • Gebruik % wanneer je consistent teken-gedrag nodig hebt (bijv. door een bereik fietsen).
  • Gebruik math.fmod() wanneer het teken van het deeltal behouden moet blijven, zoals in fysicasimulaties of wiskundige functies.

Negatieve getallen afhandelen bij Python-modulo

Zoals we eerder zagen, komt Pythons implementatie van de modulo-operator met negatieve getallen niet altijd overeen met je eerste intuïtie. Laten we dit gedrag systematischer verkennen:

# Understanding the pattern with negative numbers
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

Let op het patroon: de resultaten doorlopen herhaaldelijk 0 → 1 → 2, ongeacht of het deeltal positief of negatief is. Dit consistente gedrag maakt de modulo-operator bijzonder handig bij cyclische berekeningen, zoals:

  • Roteren door indices in circulaire arrays of buffers
  • Waarden mappen in periodieke functies (bijv. tijdgebaseerde berekeningen)

De wiskundige formule die Python volgt voor modulo is:

Import math 

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

Dit zorgt ervoor dat het resultaat altijd tussen 0 en b (exclusief) ligt wanneer b positief is, of tussen b en 0 (exclusief) wanneer b negatief is.

Samenvatting van de modulo-operator in Python

De modulo-operator (%) in Python berekent de rest van een deling. Hij volgt een consistente wiskundige formule:

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

Belangrijke regels van Pythons modulo-gedrag:

  1. Voor positieve delers (b > 0)
    • Het resultaat ligt altijd in het bereik [0, b) (inclusief 0, exclusief b).
  2. Voor negatieve delers (b < 0)
    • Het resultaat ligt altijd in het bereik (b, 0] (exclusief b, inclusief 0).
    • De rest neemt hetzelfde teken aan als b (de deler).
  3. Werkt met zowel gehele getallen als floats
    • Bij kommagetallen volgt % dezelfde formule maar kunnen kleine afrondingsfouten optreden door de precisie van floats.
  4. Verschil tussen % en math.fmod()
    • % zorgt dat de rest hetzelfde teken heeft als de deler.
    • math.fmod(a, b) zorgt dat de rest hetzelfde teken heeft als het deeltal.

Veelvoorkomende use-cases van de modulo-operator

Laten we enkele praktische toepassingen van de modulo-operator bekijken en nog wat voorbeelden zien. 

Controleren of een getal even of oneven is

Een van de meest voorkomende toepassingen van de modulo-operator is bepalen of een getal even of oneven is:

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

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

# Testing the functions
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

Dit werkt omdat even getallen een rest van 0 geven bij deling door 2, terwijl oneven getallen een rest van 1 of -1 geven.

Door een reeks fietsen

De modulo-operator is perfect voor het creëren van cyclisch gedrag, zoals roteren door een lijst met items:

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

def get_day(n):
    # Get the day of the week for the nth day, where day 0 is Monday
    return days[n % len(days)]

# Starting from Monday (day 0), what day is it after 10 days?
print(get_day(10))  # Output: "Thursday"

# What day was it 15 days ago from Monday?
print(get_day(-15))  # Output: "Sunday"
Thursday
Sunday

In dit voorbeeld geeft de functie altijd een geldige weekdag terug, ongeacht hoe groot of klein (negatief) n wordt.

Schrikkeljaarberekening

Hoewel schrikkeljaarberekeningen meerdere voorwaarden bevatten, staat de modulo-operator centraal in het algoritme:

Schikkeljaren volgen een specifieke regel:

  • Een jaar is een schrikkeljaar als het deelbaar is door 4.
  • Maar als het deelbaar is door 100, is het geen schrikkeljaar.
  • Tenzij het ook deelbaar is door 400, dan is het wel een schrikkeljaar.
def is_leap_year(year):

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

# Test the function
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

Dit zorgt ervoor dat de regels voor schrikkeljaren in de Gregoriaanse kalender correct worden toegepast.

Praktische voorbeelden van Python-modulo

Hier zijn enkele manieren waarop je de modulo-operator kunt gebruiken in je eigen Python-projecten: 

Modulo gebruiken in lussen

De modulo-operator wordt vaak gebruikt in lussen om acties op regelmatige intervallen uit te voeren:

# Print a message every 5 iterations
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!

Dit patroon is handig voor batchverwerking, voortgangsrapportage of elke functionaliteit die periodiek moet plaatsvinden.

Modulo in realistische toepassingen

Wachtwoordhashing

In cryptografische toepassingen is modulo-rekenkunde fundamenteel. Hier is een vereenvoudigd voorbeeld van hoe modulo kan worden gebruikt in een basale hashfunctie:

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

Dit is een heel basaal voorbeeld; echte cryptografische hashing is veel complexer. De modulo-bewerking zorgt ervoor dat de hashwaarde binnen een beheersbaar bereik blijft, terwijl de eigenschappen van een goede hashfunctie behouden blijven.

Kloktijdberekening

Modulo is handig voor tijdsberekeningen, zoals het omzetten van grote aantallen uren naar standaard tijdsformaten.

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

Hier zorgt de modulo-operator voor het "omslag" van uren in een 12-uursindeling.

Game-ontwikkeling: een beurtensysteem voor meerdere spelers

In turn-based games met meerdere spelers kunnen we modulo gebruiken om door spelers te cyclen.

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

Cijfers in barcodes valideren

Veel barcodesystemen gebruiken modulo-bewerkingen om fouten in gescande nummers te detecteren.

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

# Example ISBN Checksum validation
print(is_valid_isbn13(9780306406157))  # Output: True
print(is_valid_isbn13(9780306406158))  # Output: False
True
False

Conclusie

De modulo-operator is een veelzijdig hulpmiddel in Pythons arsenaal dat veel verder gaat dan simpele restberekeningen. Van het bepalen van even/oneven tot het implementeren van complexe algoritmen met cyclische patronen: modulo maakt schonere, elegantere oplossingen mogelijk voor allerlei programmeeruitdagingen.

Door zowel de basisfunctionaliteit als het genuanceerde gedrag met verschillende soorten getallen te begrijpen, kun je de modulo-operator inzetten om efficiëntere en beter leesbare code te schrijven. De volgende keer dat je logica bouwt met cycli, rotaties of periodieke gebeurtenissen, denk dan aan de modulo-operator als mogelijke oplossing.

Wil je meer leren over hoe je Python inzet voor je projecten? Bekijk dan onze interactieve cursus Introduction to Data Science in Python. 

Python-modulo: veelgestelde vragen

Hoe werkt de modulo-operator met negatieve getallen in Python?

In Python, wanneer je de modulo-operator met negatieve getallen gebruikt, heeft de uitkomst hetzelfde teken als de deler.

Kan de modulo-operator met kommagetallen worden gebruikt?

Ja, de modulo-operator werkt met kommagetallen, maar let op kleine afrondingsfouten door de manier waarop floats in computers worden weergegeven.

Hoe wordt de modulo-operator in realistische toepassingen gebruikt?

De modulo-operator wordt in diverse realistische toepassingen gebruikt, zoals hashingfuncties, kloktijdberekeningen en foutdetectie zoals ISBN-validatie.

Waarom is de modulo-operator belangrijk in programmeren?

De modulo-operator is cruciaal voor het oplossen van problemen met periodiciteit, deling en "omslag", en is daarmee een veelzijdig hulpmiddel voor efficiënte code en algoritme-ontwerp.


Benito Martin's photo
Author
Benito Martin
LinkedIn

Als oprichter van Martin Data Solutions en freelance data scientist, ML- en AI-engineer heb ik een divers portfolio in regressie, classificatie, NLP, LLM, RAG, neurale netwerken, ensemblemethoden en computer vision.

  • Met succes meerdere end-to-end ML-projecten ontwikkeld, inclusief datacleaning, analytics, modellering en deployment op AWS en GCP, met impactvolle en schaalbare oplossingen als resultaat.
  • Interactieve en schaalbare webapplicaties gebouwd met Streamlit en Gradio voor uiteenlopende usecases in de industrie.
  • Studenten lesgegeven en gecoacht in data science en analytics, en hun professionele groei gestimuleerd met gepersonaliseerde leertrajecten.
  • Cursusinhoud ontworpen voor retrieval-augmented generation (RAG)-toepassingen, afgestemd op enterprise-vereisten.
  • Technische blogs met hoge impact geschreven over AI & ML, met onderwerpen als MLOps, vectordatabases en LLM’s, die veel betrokkenheid opleverden.

In elk project dat ik aanpak, pas ik actuele praktijken uit software-engineering en DevOps toe, zoals CI/CD, codelinting, formattering, modelmonitoring, experimenttracking en robuuste foutafhandeling. Ik zet me in om complete oplossingen te leveren en data-inzichten te vertalen naar praktische strategieën die bedrijven helpen groeien en het maximale halen uit data science, machine learning en AI.

Onderwerpen
Python

Topcursussen Python

Leerpad

Python-gegevensbasisprincipes

28 uur
Verbeter je datavaardigheden, leer hoe je data kunt bewerken en visualiseren, en gebruik geavanceerde analyses om beslissingen te nemen op basis van data.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken