Last chance! 50% off DataCamp Premium
Sale ends in
Operator modulo (%) di Python adalah operator aritmetika fundamental yang digunakan untuk menentukan sisa dari sebuah operasi pembagian. Meskipun konsepnya sederhana, operator ini memegang peran penting dalam berbagai aplikasi pemrograman. Mulai dari mengecek apakah suatu bilangan genap atau ganjil hingga melakukan perputaran melalui urutan dan menentukan tahun kabisat, menguasai operator modulo dapat meningkatkan kemampuan pemecahan masalah Anda di Python.
Memahami operator modulo penting karena sering muncul dalam:
Dalam blog ini, saya akan memberikan panduan komprehensif untuk menggunakan operator modulo di Python, mencakup sintaks, perilaku dengan berbagai tipe bilangan, use case, dan contoh praktis. Jika Anda baru di Python, pertimbangkan untuk mengikuti kursus Introduction to Python kami.
Operator modulo (%) menghitung sisa pembagian antara dua bilangan. Diberikan dua bilangan a (dividen) dan b (divisor), operasi modulo mengembalikan sisa ketika a dibagi dengan b.
Modulo berakar pada aritmetika modular, sebuah sistem aritmetika untuk bilangan bulat di mana angka-angka akan "berputar kembali" setelah mencapai nilai tertentu (modulus). Ini banyak digunakan dalam kriptografi, hashing, dan komputasi siklik.
Bayangkan jam 12-jam: setelah 12, alih-alih berlanjut ke 13, kita kembali ke 1. Ini pada dasarnya adalah aritmetika modular dengan modulus 12:
13 % 12 = 1, artinya pukul 13 setara dengan pukul 1 dalam format 12 jam.Di Python, operator modulo mengikuti sintaks yang sederhana:
remainder = dividend % divisor
Mari lihat beberapa contoh dasar:
# Basic modulo operations
print(7 % 3)
print(15 % 4)
print(20 % 5)
1
3
0
Saat kita membagi 7 dengan 3, kita mendapatkan 2 dengan sisa 1. Operator modulo memberikan sisa tersebut. Demikian juga, 15 dibagi 4 menghasilkan 3 dengan sisa 3, dan 20 dibagi 5 menghasilkan tepat 4 tanpa sisa.
Sekarang kita memahami dasar-dasar operator modulo, mari kita telusuri bagaimana perilakunya dengan bilangan bulat.
Bekerja dengan bilangan bulat positif adalah use case paling langsung untuk operator modulo:
# Examples with positive integers
print(10 % 3)
print(25 % 7)
print(100 % 10)
1
4
0
Dalam contoh-contoh ini, kita dapat menghitung hasilnya dengan mencari berapa kali pembagi masuk ke dalam dividen lalu menentukan sisanya:
Perilaku operator modulo menjadi lebih menarik saat bekerja dengan bilangan negatif. Python mengikuti aturan khusus: hasil dari a % b selalu memiliki tanda yang sama dengan b (pembagi).
# Examples with negative integers
print(-10 % 3)
print(10 % -3)
print(-10 % -3)
2
-2
-1
Hasil ini mungkin tampak tidak intuitif pada awalnya, tetapi mengikuti aturan yang konsisten:
-10 % 3: Alih-alih mendapatkan -1 (yang mungkin diharapkan jika berpikir -10 ÷ 3 = -3 sisa -1), Python mengembalikan 2. Ini karena Python mencari nilai antara 0 dan 3 (eksklusif) yang, ketika ditambahkan ke kelipatan 3, menghasilkan -10. Jawabannya adalah 2, karena -12 + 2 = -10.10 % -3: Hasilnya memiliki tanda yang sama dengan pembagi (-3), sehingga kita mendapatkan -2. Ini karena 10 = (-3) × (-4) + (-2).-10 % -3: Hasilnya adalah -1, karena -10 = (-3) × 3 + (-1).Memahami bagaimana Python menangani bilangan negatif dalam operasi modulo penting saat bekerja dengan komputasi siklik, seperti:
Operator modulo Python tidak terbatas pada bilangan bulat; operator ini juga berfungsi dengan bilangan pecahan:
# 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
Dengan bilangan pecahan, operasi modulo mengikuti prinsip yang sama: mengembalikan sisa setelah pembagian. Namun, karena cara bilangan pecahan disimpan di komputer (format IEEE 754), kesalahan pembulatan kecil dapat terjadi.
Sebagai contoh, alih-alih 1.3, Python mengembalikan 1.299999999999999, dan alih-alih 0.2, Python mengembalikan 0.19999999999999973. Ketidakakuratan kecil ini umum dalam aritmetika floating-point dan perlu dipertimbangkan saat melakukan perhitungan presisi.
Python juga menyediakan fungsi math.fmod() dari modul math sebagai alternatif untuk operasi modulo floating-point, yang mungkin menangani kasus tepi tertentu secara berbeda:
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
Perbedaan utama antara % dan math.fmod() terletak pada cara mereka menangani bilangan negatif. Sementara % memastikan hasil memiliki tanda yang sama dengan pembagi dan mengembalikan nilai dalam rentang [0, pembagi), math.fmod() memastikan hasil memiliki tanda yang sama dengan dividen. Perbedaan ini penting dalam aplikasi di mana tanda sisa berpengaruh.
Jadi kapan Anda harus menggunakan % dibandingkan math.fmod()?
% saat Anda memerlukan perilaku tanda yang konsisten (misalnya, berputar dalam sebuah rentang).math.fmod() saat tanda dividen harus dipertahankan, seperti dalam simulasi fisika atau fungsi matematis.Seperti yang telah kita lihat pada contoh sebelumnya, implementasi operator modulo Python dengan bilangan negatif mungkin tidak sesuai dengan intuisi awal. Mari kita telusuri perilaku ini secara lebih sistematis:
# 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
Perhatikan polanya: hasilnya berulang 0 → 1 → 2 secara terus-menerus, terlepas dari apakah dividennya positif atau negatif. Perilaku konsisten ini membuat operator modulo sangat berguna dalam komputasi siklik, seperti:
Rumus matematis yang diikuti Python untuk modulo adalah:
Import math
a % b = a - (b * math.floor(a / b))
Ini memastikan bahwa hasilnya selalu antara 0 dan b (eksklusif) ketika b positif, atau antara b dan 0 (eksklusif) ketika b negatif.
Operator modulo (%) di Python menghitung sisa dari operasi pembagian. Operator ini mengikuti rumus matematis yang konsisten:
a % b = a - (b * math.floor(a / b))
Aturan Utama Perilaku Modulo Python:
b > 0)[0, b) (inklusif 0, eksklusif b).b < 0)(b, 0] (eksklusif b, inklusif 0).b (pembagi).% mengikuti rumus yang sama tetapi dapat menimbulkan kesalahan pembulatan kecil karena presisi floating-point.% dan math.fmod()% memastikan sisa memiliki tanda yang sama dengan pembagi.math.fmod(a, b) memastikan sisa memiliki tanda yang sama dengan dividen.Mari lihat beberapa aplikasi praktis dari operator modulo dan beberapa contoh lanjutannya.
Salah satu aplikasi paling umum dari operator modulo adalah menentukan apakah sebuah bilangan genap atau ganjil:
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
Ini berhasil karena bilangan genap menghasilkan sisa 0 saat dibagi 2, sedangkan bilangan ganjil menghasilkan sisa 1 atau -1.
Operator modulo sempurna untuk membuat perilaku siklik, seperti berputar melalui daftar item:
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
Dalam contoh ini, seberapa pun besar atau kecil (negatif) nilai n, fungsi akan selalu mengembalikan hari yang valid dalam sepekan.
Meskipun perhitungan tahun kabisat melibatkan beberapa kondisi, operator modulo menjadi inti dari algoritme:
Tahun kabisat mengikuti aturan khusus:
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
Ini memastikan bahwa aturan tahun kabisat kalender Gregorian diterapkan dengan benar.
Berikut adalah beberapa cara Anda dapat menggunakan operator modulo dalam proyek Python Anda sendiri:
Operator modulo sering digunakan dalam loop untuk melakukan aksi pada interval tetap:
# 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!
Pola ini berguna untuk pemrosesan batch, pelaporan progres, atau menerapkan fungsionalitas apa pun yang perlu terjadi secara periodik.
Dalam aplikasi kriptografi, aritmetika modulo adalah hal mendasar. Berikut contoh sederhana bagaimana modulo dapat digunakan dalam fungsi hashing dasar:
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
Ini adalah contoh yang sangat dasar, karena hashing kriptografi nyata jauh lebih kompleks. Operasi modulo memastikan nilai hash tetap dalam rentang yang terkelola sambil tetap mempertahankan sifat-sifat fungsi hash yang baik.
Modulo berguna untuk menangani perhitungan waktu, seperti mengonversi jumlah jam yang besar ke format waktu standar.
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
Di sini, operator modulo melakukan perputaran jam dalam format 12 jam.
Dalam gim berbasis giliran multipemain, kita dapat menggunakan modulo untuk berputar melalui pemain.
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
Banyak sistem barcode menggunakan operasi modulo untuk mendeteksi kesalahan pada angka yang dipindai.
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
Operator modulo adalah alat serbaguna dalam gudang Python yang melampaui sekadar perhitungan sisa. Dari menentukan bilangan ganjil/genap hingga menerapkan algoritme kompleks dengan pola siklik, modulo memungkinkan solusi yang lebih rapi dan elegan untuk berbagai tantangan pemrograman.
Dengan memahami baik fungsionalitas dasar maupun perilaku yang lebih halus dengan berbagai tipe bilangan, Anda dapat memanfaatkan operator modulo untuk menulis kode yang lebih efisien dan mudah dibaca. Lain kali ketika Anda perlu menerapkan logika yang melibatkan siklus, rotasi, atau kejadian periodik, ingatlah bahwa operator modulo mungkin merupakan solusi yang tepat.
Jika Anda ingin mempelajari lebih lanjut cara menggunakan Python untuk proyek Anda, lihat kursus interaktif kami, Introduction to Data Science in Python.
Di Python, saat menggunakan operator modulo dengan bilangan negatif, hasilnya akan memiliki tanda yang sama dengan pembagi.
Ya, operator modulo dapat digunakan dengan bilangan pecahan, tetapi waspadai potensi kesalahan pembulatan kecil karena cara float direpresentasikan di komputer.
Operator modulo digunakan dalam berbagai aplikasi dunia nyata, seperti fungsi hashing, perhitungan waktu jam, dan deteksi kesalahan seperti validasi ISBN.
Operator modulo penting untuk menyelesaikan masalah yang melibatkan periodisitas, pembagian, dan perputaran, menjadikannya alat serbaguna untuk penulisan kode dan perancangan algoritme yang efisien.
Sebagai Founder Martin Data Solutions serta Data Scientist, ML, dan AI Engineer lepas, saya memiliki portofolio beragam dalam Regression, Classification, NLP, LLM, RAG, Neural Networks, Ensemble Methods, dan Computer Vision.
Dalam setiap proyek yang saya tangani, saya memastikan menerapkan praktik terkini dalam rekayasa perangkat lunak dan DevOps, seperti CI/CD, code linting, formatting, pemantauan model, pelacakan eksperimen, dan penanganan error yang tangguh. Saya berkomitmen menyajikan solusi menyeluruh, mengubah wawasan data menjadi strategi praktis yang membantu bisnis bertumbuh dan memaksimalkan pemanfaatan data science, machine learning, dan AI.
Kursus Python Teratas
Program
Kursus
Kursus
blogs
David Woods
13 mnt
blogs
Hugo Bowne-Anderson
13 mnt

blogs
Javier Canales Luna
14 mnt
blogs
Dario Radečić
15 mnt