Python|割り算で商と余りを取得する:divmod()

1. はじめに

Pythonには、割り算の余りを同時に取得できる便利な関数としてdivmod()があります。
通常、商は//(整数除算)、余りは%(剰余演算子)で個別に計算しますが、divmod()を使えば1回の処理でまとめて取得でき、コードの可読性や実行効率が向上します。
本記事では、「Python|割り算で商と余りを取得する:divmod()」というテーマで、基本的な使い方から応用例、注意点まで詳しく解説します。

この記事を読めば、次のことが分かります:

  • divmod()の基本構文と使い方
  • 実務での活用例(ループ処理や時間計算など)
  • 初心者がつまずきやすいポイントとエラー対策

 

2. divmod()関数の基本解説

まずはdivmod()の構文と動作を理解しましょう。

2-1. 基本構文

divmod(a, b)
  • a:被除数(割られる数)
  • b:除数(割る数)
  • 戻り値:(商, 余り) のタプル

2-2. 基本的な使用例

# 商と余りを取得
result = divmod(17, 5)

print(result)       # (3, 2)
print(result[0])    # 商 → 3
print(result[1])    # 余り → 2

実行結果:

(3, 2)
3
2

上記の例では、17 ÷ 5の商が3、余りが2として返されます。
このようにdivmod()を使えば、1回の計算で商と余りの両方を取得できます。

2-3. タプルのアンパックを使った書き方

Pythonでは、タプルのアンパックを使うとコードがより読みやすくなります。

# 商と余りをそれぞれ変数に代入
quotient, remainder = divmod(23, 4)

print(f"商: {quotient}")
print(f"余り: {remainder}")

実行結果:

商: 5
余り: 3

 

3. よくある使い方・応用例

divmod()は単純な割り算だけでなく、さまざまな場面で活用できます。

3-1. 秒数から「分と秒」に変換

動画やタイマーアプリでよく使われるケースです。

# 秒数を分と秒に変換
total_seconds = 367
minutes, seconds = divmod(total_seconds, 60)

print(f"{minutes}分{seconds}秒")

実行結果:

6分7秒

367秒を60で割った商が分、余りが秒として求められます。

3-2. 時間の変換(時・分・秒)

より複雑な時間変換にも活用できます。

# 秒数を時・分・秒に変換
total_seconds = 7324
hours, remainder = divmod(total_seconds, 3600)  # 時を取得
minutes, seconds = divmod(remainder, 60)        # 分と秒を取得

print(f"{hours}時間{minutes}分{seconds}秒")

実行結果:

2時間2分4秒

3-3. バッチ処理やページ分割

大量のデータを一定数ごとに分割する際にも使えます。

# データ件数とページサイズ
total_items = 53
items_per_page = 10

pages, remaining = divmod(total_items, items_per_page)

print(f"必要なページ数: {pages + (1 if remaining else 0)}")

実行結果:

必要なページ数: 6

divmod()でページ数と最後の余りデータを簡単に計算できます。

 

4. 注意点・エラー対策

4-1. 除数が0の場合

divmod()で除数が0になるとZeroDivisionErrorが発生します。

try:
    divmod(10, 0)
except ZeroDivisionError:
    print("除数が0のため計算できません。")

実行結果:

除数が0のため計算できません。

4-2. 浮動小数点数の扱い

divmod()は浮動小数点数にも対応していますが、余りの計算は小数で返ります。

q, r = divmod(7.5, 2.5)
print(q, r)

実行結果:

3.0 0.0

整数での計算を期待する場合は、事前に型変換(int())を行いましょう。

4-3. マイナスの数の扱い

マイナスの値を扱うと、商と余りの符号に注意が必要です。

print(divmod(-17, 5))
print(divmod(17, -5))

実行結果:

(-4, 3)
(-4, -3)

Pythonのdivmod()は、商が切り下げ(floor)になるため、期待と異なる場合があります。

 

5. まとめ

  • divmod(a, b)で商と余りを同時に取得できる
  • 時間変換やページ分割など実務でも活用可能
  • 除数が0や負数の場合の挙動に注意

特に、1回の計算で商と余りを取得できるのはパフォーマンス上のメリットもあります。
日常のプログラム作成でも、分や秒の変換、データのバッチ分割など、さまざまなシーンで活用してみましょう。

タイトルとURLをコピーしました