Weiter zum Inhalt

Modulo-Operator in Python: Zentrale Konzepte verständlich erklärt

Lerne, wie du den Modulo-Operator (%) in Python einsetzt – von Gerade/Ungerade-Prüfungen über Kryptografie bis zu zyklischen Datenstrukturen.
Aktualisiert 18. Sept. 2026  · 9 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Der Modulo-Operator (%) in Python ist ein grundlegender arithmetischer Operator, mit dem du den Rest einer Division bestimmst. So simpel das Konzept ist, so wichtig ist es in der Praxis: Vom Prüfen, ob eine Zahl gerade oder ungerade ist, über das zyklische Durchlaufen von Sequenzen bis hin zur Bestimmung von Schaltjahren – wer den Modulo-Operator beherrscht, löst viele Probleme in Python eleganter.

Ein Verständnis des Modulo-Operators ist essenziell, weil er häufig genutzt wird für:

  • Die Erkennung gerader und ungerader Zahlen
  • Zyklisches Durchlaufen von Elementen
  • Mathematische Berechnungen in modularer Arithmetik
  • Reale Anwendungsfälle wie Datumsberechnungen, Kryptografie und Spiellogiken.

In diesem Blog findest du eine umfassende Einführung in den Modulo-Operator in Python – inklusive Syntax, Verhalten mit verschiedenen Zahlentypen, Anwendungsfällen und praxisnahen Beispielen. Wenn du neu in Python bist, starte gern mit unserem Kurs Introduction to Python

Was ist der Modulo-Operator in Python?

Der Modulo-Operator (%) berechnet den Rest der Division zweier Zahlen. Gegeben zwei Zahlen a (Dividend) und b (Divisor) liefert die Modulo-Operation den Rest, der entsteht, wenn a durch b geteilt wird.

Mathematischer Hintergrund

Modulo stammt aus der modularen Arithmetik – einer Arithmetik für ganze Zahlen, bei der Zahlen nach Erreichen eines bestimmten Werts (Modulus) „umlaufen“. Sie ist weit verbreitet in Kryptografie, Hashing und zyklischen Berechnungen.

Denk an eine 12-Stunden-Uhr: Nach 12 folgt nicht 13, sondern es geht wieder bei 1 los. Das ist im Kern modulare Arithmetik mit dem Modulus 12:

  • 13 % 12 = 1, bedeutet: 13 Uhr entspricht 1 Uhr im 12-Stunden-Format.

Python-Modulo: Syntax und Basisnutzung

In Python ist die Syntax des Modulo-Operators einfach:

remainder = dividend % divisor

Schauen wir uns ein paar einfache Beispiele an:

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

Teilen wir 7 durch 3, erhalten wir 2 mit einem Rest von 1. Genau diesen Rest liefert der Modulo-Operator. Entsprechend ergibt 15 durch 4 den Quotienten 3 mit Rest 3, und 20 durch 5 ergibt genau 4 ohne Rest.

Arbeiten mit Ganzzahlen

Nachdem die Grundlagen klar sind, sehen wir uns das Verhalten mit Ganzzahlen an.

Modulo mit positiven Ganzzahlen

Mit positiven Ganzzahlen ist die Nutzung des Modulo-Operators am geradlinigsten:

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

Hier berechnest du das Ergebnis, indem du ermittelst, wie oft der Divisor in den Dividend passt, und was übrig bleibt:

  • 10 ÷ 3 = 3 Rest 1, also 10 % 3 = 1
  • 25 ÷ 7 = 3 Rest 4, also 25 % 7 = 4
  • 100 ÷ 10 = 10 Rest 0, also 100 % 10 = 0

Modulo mit negativen Ganzzahlen

Spannender wird es mit negativen Zahlen. Python folgt einer klaren Regel: Das Ergebnis von a % b hat immer dasselbe Vorzeichen wie b (der Divisor).

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

Diese Ergebnisse wirken zunächst kontraintuitiv, folgen aber einer konsistenten Logik:

  1. Bei -10 % 3: Anstatt -1 (wenn man an -10 ÷ 3 = -3 Rest -1 denkt) liefert Python 2. Denn Python sucht einen Wert zwischen 0 und 3 (exklusiv), der zu einem Vielfachen von 3 addiert -10 ergibt. Die 2 passt, weil -12 + 2 = -10.
  2. Bei 10 % -3: Das Ergebnis übernimmt das Vorzeichen des Divisors (-3), daher -2. Denn 10 = (-3) × (-4) + (-2).
  3. Bei -10 % -3: Das Ergebnis ist -1, denn -10 = (-3) × 3 + (-1).

Dieses Verhalten ist wichtig für zyklische Berechnungen, zum Beispiel:

  • Implementierung von Hashfunktionen
  • Aufgaben mit Uhrenarithmetik
  • Behandlung negativer Indizes in Listen

Modulo mit Gleitkommazahlen

Der Modulo-Operator in Python ist nicht auf Ganzzahlen beschränkt, er funktioniert auch mit Gleitkommazahlen:

# 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

Bei Floats gilt dasselbe Prinzip: Es wird der Rest nach der Division zurückgegeben. Durch die interne Darstellung von Gleitkommazahlen (IEEE-754) können jedoch kleine Rundungsfehler auftreten.

So liefert Python etwa statt 1.3 den Wert 1.299999999999999 und statt 0.2 den Wert 0.19999999999999973. Diese Abweichungen sind in der Fließkommaarithmetik üblich und sollten bei präzisen Berechnungen berücksichtigt werden.

Als Alternative für Gleitkomma-Modulo bietet Python die Funktion math.fmod() aus dem math-Modul, die bestimmte Randfälle anders behandelt:

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

Der wichtigste Unterschied zwischen % und math.fmod() liegt im Umgang mit negativen Zahlen. Während % sicherstellt, dass das Ergebnis dasselbe Vorzeichen wie der Divisor hat und im Bereich [0, Divisor) liegt, sorgt math.fmod() dafür, dass das Ergebnis dasselbe Vorzeichen wie der Dividend hat. Dieser Unterschied ist relevant, wenn das Vorzeichen des Rests eine Rolle spielt.

Wann solltest du also % und wann math.fmod() verwenden?

  • Nutze %, wenn du ein konsistentes Vorzeichenverhalten brauchst (z. B. beim Durchlaufen eines Bereichs).
  • Nutze math.fmod(), wenn das Vorzeichen des Dividenden erhalten bleiben soll, etwa in physikalischen Simulationen oder mathematischen Funktionen.

Umgang mit negativen Zahlen beim Python-Modulo

Wie gesehen, entspricht die Umsetzung des Modulo-Operators in Python bei negativen Zahlen nicht immer der ersten Intuition. Betrachten wir das Muster systematischer:

# 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

Auffällig ist das Muster: Die Ergebnisse laufen wiederholt durch 0 → 1 → 2 – unabhängig davon, ob der Dividend positiv oder negativ ist. Diese Konsistenz macht den Modulo-Operator besonders nützlich für zyklische Berechnungen, etwa:

  • Rotieren durch Indizes in Ringpuffern oder zirkulären Arrays
  • Abbilden von Werten in periodischen Funktionen (z. B. zeitbasierte Berechnungen)

Die mathematische Formel, der Python beim Modulo folgt, lautet:

Import math 

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

Damit liegt das Ergebnis stets zwischen 0 und b (exklusiv), wenn b positiv ist, bzw. zwischen b und 0 (exklusiv), wenn b negativ ist.

Zusammenfassung: Modulo in Python

Der Modulo-Operator (%) in Python berechnet den Rest einer Division. Er folgt einer konsistenten mathematischen Formel:

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

Wichtige Regeln für das Modulo-Verhalten in Python:

  1. Bei positivem Divisor (b > 0)
    • Liegt das Ergebnis immer im Bereich [0, b) (inklusive 0, exklusiv b).
  2. Bei negativem Divisor (b < 0)
    • Liegt das Ergebnis immer im Bereich (b, 0] (exklusiv b, inklusive 0).
    • Der Rest übernimmt das Vorzeichen von b (dem Divisor).
  3. Funktioniert mit Integers und Floats
    • Bei Gleitkommazahlen folgt % derselben Formel, kann aber wegen Fließkommapräzision kleine Rundungsfehler erzeugen.
  4. Unterschied zwischen % und math.fmod()
    • % stellt sicher, dass der Rest dasselbe Vorzeichen wie der Divisor hat.
    • math.fmod(a, b) stellt sicher, dass der Rest dasselbe Vorzeichen wie der Dividend hat.

Häufige Anwendungsfälle des Modulo-Operators

Schauen wir uns praktische Einsatzszenarien für den Modulo-Operator an – mit weiteren Beispielen. 

Prüfen, ob eine Zahl gerade oder ungerade ist

Einer der häufigsten Einsätze des Modulo-Operators ist die Bestimmung, ob eine Zahl gerade oder ungerade ist:

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

Das funktioniert, weil gerade Zahlen beim Teilen durch 2 den Rest 0 haben, während ungerade Zahlen den Rest 1 oder -1 ergeben.

Zyklisch durch eine Sequenz gehen

Der Modulo-Operator eignet sich perfekt, um zyklisches Verhalten zu erzeugen – etwa beim Rotieren durch eine Liste:

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 diesem Beispiel liefert die Funktion immer einen gültigen Wochentag – egal, wie groß oder klein (negativ) n ist.

Schaltjahrberechnung

Auch wenn mehrere Bedingungen nötig sind, steht der Modulo-Operator im Zentrum des Algorithmus:

Schaltjahre folgen dieser Regel:

  • Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist.
  • Ist es aber durch 100 teilbar, ist es kein Schaltjahr.
  • Außer es ist auch durch 400 teilbar – dann ist es doch ein Schaltjahr.
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

So werden die Regeln des gregorianischen Kalenders korrekt angewendet.

Praktische Beispiele für Python-Modulo

So kannst du den Modulo-Operator in eigenen Python-Projekten einsetzen: 

Modulo in Schleifen

Der Modulo-Operator wird in Schleifen häufig verwendet, um Aktionen in regelmäßigen Abständen auszuführen:

# 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!

Dieses Muster ist nützlich für Batch-Verarbeitung, Fortschrittsmeldungen oder jede periodische Funktionalität.

Modulo in realen Anwendungen

Passworthashing

In der Kryptografie ist modulare Arithmetik grundlegend. Hier ein vereinfachtes Beispiel, wie Modulo in einer einfachen Hashfunktion genutzt wird:

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

Das ist ein stark vereinfachtes Beispiel – echte kryptografische Hashingverfahren sind deutlich komplexer. Die Modulo-Operation sorgt dafür, dass der Hashwert in einem handhabbaren Bereich bleibt und trotzdem gute Verteilungseigenschaften aufweist.

Zeitberechnung mit Uhren

Modulo hilft bei Zeitumrechnungen, z. B. um viele Stunden in ein Standardformat zu überführen.

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 sorgt der Modulo-Operator für das „Umlaufen“ der Stunden im 12-Stunden-Format.

Spieleentwicklung: Runden in Mehrspieler-Spielen

In rundenbasierten Mehrspieler-Spielen kannst du mit Modulo bequem durch die Spielenden rotieren.

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

Ziffernvalidierung bei Barcodes

Viele Barcodesysteme nutzen Modulo, um Fehler in gescannten Zahlen zu erkennen.

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

Fazit

Der Modulo-Operator ist ein vielseitiges Werkzeug in Pythons Werkzeugkasten – weit über einfache Restberechnungen hinaus. Von der Bestimmung gerader/ungerader Zahlen bis zur Umsetzung komplexer, zyklischer Algorithmen ermöglicht Modulo schlanke, elegante Lösungen für viele Programmieraufgaben.

Wenn du sowohl die Grundlagen als auch die Feinheiten mit unterschiedlichen Zahlentypen kennst, kannst du den Modulo-Operator gezielt einsetzen und effizienteren, besser lesbaren Code schreiben. Immer wenn es um Zyklen, Rotationen oder periodische Ereignisse geht, lohnt sich ein Blick auf den Modulo-Operator.

Wenn du mehr darüber lernen möchtest, wie du Python in deinen Projekten einsetzt, schau dir unseren interaktiven Kurs Introduction to Data Science in Python an. 

Python-Modulo: FAQs

Wie funktioniert der Modulo-Operator mit negativen Zahlen in Python?

In Python hat das Ergebnis beim Modulo mit negativen Zahlen stets dasselbe Vorzeichen wie der Divisor.

Kann der Modulo-Operator mit Gleitkommazahlen verwendet werden?

Ja, der Modulo-Operator funktioniert auch mit Gleitkommazahlen. Beachte aber kleine Rundungsfehler, die durch die interne Darstellung von Floats entstehen können.

Wie wird der Modulo-Operator in realen Anwendungen eingesetzt?

Der Modulo-Operator wird in vielen realen Anwendungen genutzt, etwa in Hashfunktionen, Zeit-/Uhrenberechnungen und bei Fehlererkennung wie der ISBN-Prüfung.

Warum ist der Modulo-Operator in der Programmierung wichtig?

Der Modulo-Operator ist wichtig, um Probleme mit Periodizität, Teilbarkeit und Umlauf zu lösen – ein vielseitiges Werkzeug für effizienten Code und Algorithmen.


Benito Martin's photo
Author
Benito Martin
LinkedIn

Als Gründer von Martin Data Solutions und freiberuflicher Datenwissenschaftler, ML- und KI-Ingenieur bringe ich ein vielfältiges Portfolio in den Bereichen Regression, Klassifizierung, NLP, LLM, RAG, Neuronale Netze, Ensemble-Methoden und Computer Vision mit.

  • Er hat erfolgreich mehrere End-to-End-ML-Projekte entwickelt, einschließlich Datenbereinigung, Analyse, Modellierung und Bereitstellung auf AWS und GCP, und dabei wirkungsvolle und skalierbare Lösungen geliefert.
  • Du hast mit Streamlit und Gradio interaktive und skalierbare Webanwendungen für verschiedene Branchen entwickelt.
  • Er unterrichtete und betreute Studierende in den Bereichen Datenwissenschaft und Analytik und förderte ihre berufliche Entwicklung durch personalisierte Lernansätze.
  • Entwickelte Kursinhalte für Retrieval-Augmented-Generating (RAG)-Anwendungen, die auf die Anforderungen von Unternehmen zugeschnitten sind.
  • Er hat hochwirksame technische Blogs zu Themen wie MLOps, Vektordatenbanken und LLMs verfasst und damit ein hohes Maß an Engagement erzielt.

Bei jedem Projekt, das ich übernehme, achte ich darauf, dass ich die neuesten Praktiken des Software-Engineerings und der DevOps anwende, wie CI/CD, Code Linting, Formatierung, Modellüberwachung, Experiment-Tracking und robuste Fehlerbehandlung. Ich biete Komplettlösungen an und verwandle Datenerkenntnisse in praktische Strategien, die Unternehmen dabei helfen, zu wachsen und das Beste aus Data Science, maschinellem Lernen und KI herauszuholen.

Themen
Python

Top-Python-Kurse

Lernpfad

Python Daten Grundlagen

28 Std.
Erweitere deine Datenkenntnisse, entdecke, wie du Daten manipulieren und visualisieren kannst, und wende fortgeschrittene Analysen an, um datengestützte Entscheidungen zu treffen.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow