Pythonで商と余りを一括取得!divmod()関数の便利な使い方
Pythonで割り算を行う際、商(割り算の結果の整数部分)と余りの両方が同時に必要になるケースはよくあります。例えば、時間の計算(〇時間〇分)、ページネーション(〇ページ目、残り〇件)、あるいは特定の周期性を持つ処理などで役立ちます。Pythonには、これらの値を一度に取得できる便利な組み込み関数、**divmod()**があります。この記事では、divmod()関数の使い方と、その活用例を詳しく解説します。
➗ divmod()関数とは?
divmod(a, b)関数は、2つの数値aとbを受け取り、aをbで割ったときの商と余りをタプルとして同時に返す組み込み関数です。
戻り値は常に(商, 余り)の形式になります。
# divmod()の基本的な使い方
result = divmod(10, 3)
print(result) # (3, 1)
# タプル unpacking で個別に取得
quotient, remainder = divmod(10, 3)
print(f"商: {quotient}, 余り: {remainder}") # 商: 3, 余り: 1
これは、a // b(商)とa % b(余り)を別々に計算するよりも効率的で、コードも簡潔になります。
💡 divmod()の活用例
divmod()関数は、様々な実用的なシーンで役立ちます。
時間の単位変換に使う
秒数を「分と秒」や「時間と分」に変換する際にdivmod()は非常に便利です。
# 秒を分と秒に変換
total_seconds = 150
minutes, seconds = divmod(total_seconds, 60)
print(f"{minutes}分{seconds}秒") # 2分30秒
ページネーションの計算に使う
全アイテム数と1ページあたりの表示数を元に、必要なページ数と最終ページのアイテム数を計算する際にも使えます。
# 全アイテム数と1ページあたりのアイテム数からページネーションを計算
total_items = 105
items_per_page = 10
pages, last_page_items = divmod(total_items, items_per_page)
# 最後のページにアイテムが残る場合、ページ数を1増やす
if last_page_items > 0:
pages += 1
print(f"必要なページ数: {pages}, 最終ページのアイテム数: {last_page_items}")
# 必要なページ数: 11, 最終ページのアイテム数: 5
負の数の扱いについて
divmod()は負の数に対しても正しく動作しますが、Pythonの//(切り捨て除算)と%(剰余)のルールに従います。Pythonでは、剰余の符号は除数(割る数)の符号と同じになります。
# 負の数でのdivmod()の例
print(divmod(-10, 3)) # (-4, 2) # -10 = 3 * (-4) + 2
print(divmod(10, -3)) # (-4, -2) # 10 = (-3) * (-4) + (-2)
print(divmod(-10, -3)) # (3, -1) # -10 = (-3) * 3 + (-1)
この動作は他のプログラミング言語と異なる場合があるため、注意が必要です。
まとめ
Pythonの**divmod()関数は、割り算の商と余りを同時に効率的に取得**できる強力なツールです。時間の計算やページネーション、その他、周期的なパターンを扱う際にコードを簡潔にし、可読性を高めることができます。この便利な関数をぜひ活用してみてください。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座


