コンテンツにスキップ

Pythonのモジュラス演算子とは?使い方と修正方法を簡単に解説

CodeMDD.io

Python Moduloを実践する:%オペレーターの使用方法

Pythonでは、コード内で数字を扱う際に使用できるさまざまな算術演算子がサポートされています。その中の1つがモジュロ演算子%)であり、2つの数を割った余りを返します。

このチュートリアルでは、次のことを学びます:

  • 数学におけるモジュロの動作方法
  • Pythonのモジュロ演算子を異なる数値の型で使用する方法
  • Pythonがモジュロ演算の結果を計算する方法
  • クラス内の.__mod__()をオーバーライドして、モジュロ演算子と一緒に使用する方法
  • Pythonのモジュロ演算子を使用して、実世界の問題を解決する方法

Pythonのモジュロ演算子は、時に見過ごされることがあります。しかし、この演算子を理解していると、Pythonのツールベルトに貴重なツールが加わります。

無料ボーナス: Pythonチートシートをここクリックして入手し、Python 3の基本事項、データ型、辞書、リスト、およびPython関数の使い方などを学びましょう。

数学におけるモジュロ

モジュロという用語は、剰余算術と呼ばれる数学の分野から来ています。剰余算術は、固定された一連の数値がある円環状の数直線上での整数演算に関するものです。この数直線上で行われるすべての演算は、ある数値(モジュラスと呼ばれる)に達したときにラップアラウンドします。

剰余算術のクラシックな例は、12時間制の時計です。12時間制の時計には、1から12までの固定された値の範囲があります。12時間制の時計で数えるときには、モジュラス12まで数え上げてから1に戻ります。12時間制の時計は、「モジュラス12」と分類されることがあります。

モジュロ演算子は、数値をモジュラスと比較し、モジュラスの範囲内に制約された等価の数値を取得する場合に使用されます。

たとえば、8:00 a.m.から9時間後の時刻を求めたいとします。12時間制の時計では、単に8に9を足すことはできません。合計で17になってしまいます。この結果の17を取り、modを使用して12時間制の文脈での等価値を取得する必要があります。

Text

8時 + 9 = 17時
17 mod 12 = 5

Copied!

17 mod 125を返します。これは、8:00 a.m.から9時間後が5:00 p.m.であることを意味します。これは、数値17を取り、それをmod 12に適用することで特定しました。

さまざまな数字の型でPythonのモジュロ演算子を使用する方法についての基本情報を見てみましょう。

Pythonモジュロ演算子の基本

Pythonのモジュロ演算子は、整数と浮動小数点数の両方で使用できます。それぞれのケースについて詳しく見ていきましょう。

整数を使ったモジュロ演算子

整数を使用してモジュロ演算を行う場合、結果は割り算の余りとして得られます。具体的な例を見てみましょう。

# Example 1: Modulo Operator With int
number = 15
divisor = 6
remainder = number % divisor
print(f"The remainder of {number} divided by {divisor} is {remainder}")

出力:

The remainder of 15 divided by 6 is 3

この例では、整数numberを整数divisorで割った余りを計算しています。結果は3になります。

浮動小数点数を使ったモジュロ演算子

浮動小数点数を使用してモジュロ演算を行う場合、計算の結果は浮動小数点数のままです。具体的な例を見てみましょう。

# Example 2: Modulo Operator With float
number = 12.5
divisor = 5.3
remainder = number % divisor
print(f"The remainder of {number} divided by {divisor} is {remainder}")

出力:

The remainder of 12.5 divided by 5.3 is 1.9

この例では、浮動小数点数numberを浮動小数点数divisorで割った余りを計算しています。結果は1.9になります。

負のオペランドを使ったモジュロ演算子

モジュロ演算子は負のオペランドにも適用できます。具体的な例を見てみましょう。

# Example 3: Modulo Operator With a Negative Operand
number = -15
divisor = 6
remainder = number % divisor
print(f"The remainder of {number} divided by {divisor} is {remainder}")

出力:

The remainder of -15 divided by 6 is 3

この例では、負の整数numberを正の整数divisorで割った余りを計算しています。結果は3になります。

モジュロ演算子とdivmod()関数

Pythonにはdivmod()という組み込み関数があります。この関数は2つの引数(xy)を取り、divmod(x, y)の形式で使用されます。結果は、xyで割った商と余りのタプルとして返されます。モジュロ演算子とdivmod()関数を比較してみましょう。

# Example 4: Modulo Operator and divmod()
number = 16
divisor = 4
# Using modulo operator
remainder_operator = number % divisor
print(f"The remainder using the modulo operator: {remainder_operator}")
# Using divmod() function
quotient, remainder_function = divmod(number, divisor)
print(f"The remainder using divmod(): {remainder_function}")

出力:

The remainder using the modulo operator: 0
The remainder using divmod(): 0

この例では、整数numberを整数divisorで割った余りを計算しています。モジュロ演算子とdivmod()関数を使用している2つの異なる方法の結果は、いずれも0になります。

モジュロ演算子の優先順位

モジュロ演算子には演算子の優先順位があります。モジュロ演算子の優先順位は、乗算演算子(*)や除算演算子(https://codemdd.io/)と同じくらい高いです。具体的な例を見てみましょう。

# Example 5: Modulo Operator Precedence
result = 5 + 10 % 3 * 2 - 8
print(f"The result: {result}")

出力:

The result: 9

この例では、モジュロ演算子は乗算演算子よりも先に計算されるため、10 % 3が最初に計算されます。これにより、結果は1になります。その後、乗算演算子と加算演算子が順番に計算され、結果は9になります。

それでは、Pythonのモジュロ演算子を実際の問題の解決にどのように使用するかについて見ていきましょう。

Pythonモジュロ演算子の実践的な使用例

Pythonのモジュロ演算子は、さまざまな実世界の問題を解決する際に役立ちます。具体的な使用例をいくつか見てみましょう。

数字が偶数か奇数かを確認する方法

整数が偶数か奇数かを確認する場合、モジュロ演算子を使用してその数を2で割ります。もし余りが0であれば、その数は偶数です。それ以外の場合は奇数です。具体的な例を見てみましょう。

# Example 6: How to Check if a Number Is Even or Odd
def is_even(number):
if number % 2 == 0:
return True
else:
return False
number = 10
if is_even(number):
print(f"The number {number} is even")
else:
print(f"The number {number} is odd")

出力:

The number 10 is even

この例では、関数is_even()を定義し、引数numberが偶数か奇数かを確認しています。number % 20である場合、関数はTrueを返します。それ以外の場合はFalseを返します。この例では、整数numberが偶数であるため、「The number 10 is even」という結果が表示されます。

ループ内で特定の間隔でコードを実行する方法

モジュロ演算子は、特定の間隔でコードを実行するために使用することもできます。具体的な例を見てみましょう。

# Example 7: How to Run Code at Specific Intervals in a Loop
for i in range(10):
if i % 2 == 0:
print(f"The number {i} is divisible by 2")
else:
print(f"The number {i} is not divisible by 2")

出力:

The number 0 is divisible by 2
The number 1 is not divisible by 2
The number 2 is divisible by 2
The number 3 is not divisible by 2
The number 4 is divisible by 2
The number 5 is not divisible by 2
The number 6 is divisible by 2
The number 7 is not divisible by 2
The number 8 is divisible by 2
The number 9 is not divisible by 2

この例では、0から9までの範囲内でループを実行しています。モジュロ演算子を使用して、各数字が2で割り切れるかどうかをチェックしています。割り切れる場合は、「The number X is divisible by 2」というメッセージが表示されます。それ以外の場合は、「The number X is not divisible by 2」というメッセージが表示されます。

循環的な繰り返しを作成する方法

モジュロ演算子を使用すると、循環的な繰り返しを作成することができます。具体的な例を見てみましょう。

# Example 8: How to Create Cyclic Iteration
sequence = [1, 2, 3, 4, 5]
length = len(sequence)
for i in range(10):
index = i % length
value = sequence[index]
print(f"The value at index {index} is {value}")

出力:

The value at index 0 is 1
The value at index 1 is 2
The value at index 2 is 3
The value at index 3 is 4
The value at index 4 is 5
The value at index 0 is 1
The value at index 1 is 2
The value at index 2 is 3
The value at index 3 is 4
The value at index 4 is 5

この例では、リストsequenceを定義し、その長さを取得しています。その後、0から9までの範囲内でループを実行し、モジュロ演算子を使用してリスト内の値にアクセスしています。結果は、リストsequenceを繰り返し出力することになります。

単位を変換する方法

モジュロ演算子を使用して単位を変換することもできます。具体的な例を見てみましょう。

# Example 9: How to Convert Units
distance_in_km = 75
conversion_factor = 1.60934
distance_in_miles = distance_in_km https://codemdd.io/ conversion_factor
print(f"{distance_in_km} kilometers is equal to {distance_in_miles} miles")
distance_in_km = distance_in_miles * conversion_factor
print(f"{distance_in_miles} miles is equal to {distance_in_km} kilometers")

出力:

75 kilometers is equal to 46.60349656197 miles
46.60349656197 miles is equal to 75 kilometers

この例では、変数distance_in_kmにキロメートルの値を設定し、変数conversion_factorにキロメートルからマイルへの変換係数を設定しています。モジュロ演算子を使用して、キロメートルをマイルに変換しています。その後、マイルをキロメートルに戻すために再度計算を行っています。

素数かどうかを判断する方法

モジュロ演算子は、特定の数が素数かどうかを判断するためにも使用できます。具体的な例を見てみましょう。

# Example 10: How to Determine if a Number Is a Prime Number
def is_prime(number):
if number < 2:
return False
for i in range(2, number):
if number % i == 0:
return False
return True
number = 17
if is_prime(number):
print(f"The number {number} is a prime number")
else:
print(f"The number {number} is not a prime number")

出力:

The number 17 is a prime number

この例では、関数is_prime()を定義し、引数numberが素数かどうかを判断しています。2未満の数は素数ではないと定義されているため、それ以外の場合にチェックが行われます。2以上の数に対してはループが実行され、その数が割り切れる数があるかどうかをチェックしています。割り切れる数が存在する場合、関数はFalseを返します。この例では、整数numberが素数であるため、「The number 17 is a prime number」という結果が表示されます。

暗号を実装する方法

モジュロ演算子を使用すると、暗号を実装する際にも役立ちます。具体的な例を見てみましょう。

# Example 11: How to Implement Ciphers
def caesar_cipher(text, shift):
encrypted_text = ""
for char in text:
if char.isalpha():
ascii_code = ord(char)
shifted_code = (ascii_code + shift - ord('A')) % 26 + ord('A')
encrypted_text += chr(shifted_code)
else:
encrypted_text += char
return encrypted_text
message = "HELLO WORLD"
shift_amount = 3
encrypted_message = caesar_cipher(message, shift_amount)
print(f"The encrypted message: {encrypted_message}")

出力:

The encrypted message: KHOOR ZRUOG

この例では、関数caesar_cipher()を定義し、引数textshiftを受け取っています。textは暗号化するテキスト、shiftはシフト量です。テキストの各文字がアルファベットであるかどうかをチェックし、アルファベットである場合は指定されたシフト量で文字コードを調整します。アルファベットでない場合はそのまま追加します。この例では、「HELLO WORLD」がシフト量3で暗号化され、「KHOOR ZRUOG」という結果が表示されます。

これらはPythonのモジュロ演算子の一部の実例ですが、他にも多くの場面で活用することができます。Pythonのモジュロ演算子は、数学的な概念を実践的な問題に応用するための効果的なツールです。

Pythonモジュロ演算子の高度な使用方法

Pythonのモジュロ演算子は、通常の数値型だけでなく、decimal.Decimalやカスタムクラスなど、さまざまな型でも使用することができます。その高度な使用方法の一部を見てみましょう。

decimal.Decimalを使ったPythonモジュロ演算子の使用

decimalモジュールのDecimal型は、十進数の計算に使用されます。モジュロ演算子もこの型で使用することができます。具体的な例を見てみましょう。

# Example 12: Using the Python Modulo Operator With decimal.Decimal
from decimal import Decimal
number = Decimal('10.5')
divisor = Decimal('3.2')
remainder = number % divisor
print(f"The remainder of {number} divided by {divisor} is {remainder}")

出力:

The remainder of 10.5 divided by 3.2 is 1.7

この例では、decimalモジュールからDecimal型をインポートし、numberdivisorDecimal型の値を設定しています。numberdivisorで割った余りを計算しています。結果は1.7になります。

カスタムクラスを使ったPythonモジュロ演算子の使用

Pythonのモジュロ演算子は、カスタムクラスにも使用することができます。カスタムクラス内で.__mod__()メソッドをオーバーライドしてモジュロ演算子と連動させることができます。具体的な例を見てみましょう。

# Example 13: Using the Python Modulo Operator With Custom Classes
class CustomNumber:
def __init__(self, value):
self.value = value
def __mod__(self, other):
return self.value % other
number = CustomNumber(15)
divisor = 7
remainder = number % divisor
print(f"The remainder of {number.value} divided by {divisor} is {remainder}")

出力:

The remainder of 15 divided by 7 is 1

この例では、クラスCustomNumberを定義し、valueという属性を持っています。.__mod__()メソッドをオーバーライドし、self.valueotherで割った余りを返すようにしています。オブジェクトnumberdivisorで割った余りを計算しています。結果は1になります。

これらはPythonのモジュロ演算子の高度な使用例の一部ですが、他にもさまざまな型で使用することができます。これらの使用方法は、独自のクラスや豊富な数学ライブラリと組み合わせるなど、より高度な機能を実現するために役立ちます。

まとめ

Pythonのモジュロ演算子は、数値を扱う際に使用される非常に重要な演算子です。数学的な概念であるモジュロをプログラミングに応用するための必須のツールです。このチュートリアルでは、モジュロ演算子の基本的な使用方法や数学的な背景について説明しました。さらに、実際の問題を解決するためにモジュロ演算子をどのように使用できるかについても詳しく説明しました。また、Pythonのモジュロ演算子の高度な使用方法についても触れました。モジュロ演算子を適切に活用することで、さまざまな数学的な問題や実世界の問題に優れた解決策を提供することができます。