Python3 divmod() 関数
Python divmod() 関数は2つの数値型(複素数以外)のパラメータを受け取り、商と余りを含むタプル (a // b, a % b) を返します。
python 3.x バージョンでは、この関数は複素数をサポートしていません。
関数構文
divmod() 関数は2つのパラメータ(通常は2つの数値)を受け取り、2つの値を含むタプルを返します。最初の値は最初のパラメータを2番目のパラメータで割った商(すなわち整数部分)、2番目の値は余りです。
divmod(a, b)
パラメータの説明:
- a: 数値(複素数以外)。
- b: 数値(複素数以外)。
パラメータaとパラメータbが両方とも整数の場合、関数が返す結果は次と同等です。(a // b, a % b)。
いずれかのパラメータが浮動小数点数の場合、関数が返す結果は (q, a % b) と同等です。q は通常 math.floor(a / b) ですが、それより 1 小さい場合もあります。ただし、q * b + a % b の値は a に非常に近くなります。
a % b の剰余結果が 0 でない場合、剰余の正負の符号はパラメータ b と同じです。b が正の数なら剰余は正の数、b が負の数なら剰余も負の数になります。また、0 <= abs(a % b) < abs(b) です。
例
(3, 1)
>>> divmod(8, 2)
(4, 0)
>>> divmod(8, -2)
(-4, 0)
>>> divmod(3, 1.3)
(2.0, 0.3999999999999999)
divmod() 関数の適用シーン
divmod() は、時間変換やページネーション計算などのシーンで非常に役立ちます。
1. 時間変換 例えば、合計秒数を時間、分、秒に変換します:
例
hours, remainder = divmod(total_seconds, 3600)
minutes, seconds = divmod(remainder, 60)
print(f"{hours}時間 {minutes}分 {seconds}秒") # 出力:1時間 1分 1秒
2. ページネーション計算 ページネーションシステムでは、divmod() を使って総ページ数と最終ページのレコード数を計算できます:
例
items_per_page = 10
pages, remainder = divmod(total_items, items_per_page)
if remainder:
pages += 1
print(f"総ページ数:{pages}") # 出力:総ページ数:11
divmod() 関数の注意事項
divmod() 関数の2番目のパラメータは0にできません。そうでないと ZeroDivisionError 例外が発生します。
divmod() 関数が返す商と余りの型は、入力パラメータの型に依存します。入力パラメータが整数の場合、返される商と余りも整数です。入力パラメータが浮動小数点数の場合、返される商と余りも浮動小数点数です。
その他の拡張