本ページはプロモーションが含まれています

[Python] 割り算の商と余りの求め方

Python数値型数学演算組込み型

Pythonで割り算の「商」と「余り」について、下記のポイントでまとめました。

  • 「商」の求め方
    • /演算子と//演算子はどちらも”商”が出力されますが、その違い
  • 「余り」の求め方
  • 「商」と「余り」を同時に出力する方法

スポンサーリンク

確認した環境

  • Ubuntu20.04LTS
  • Python3.11.2

「商」の求め方

/ 演算子(x / y)

x と y のを返します。値は常に浮動小数点数です。

# 値は常に浮動小数点です。
>>> 4 / 2
2.0

>>> 5 / 3
1.6666666666666667

# 複素数も計算されます
>>> (1+2j)/3
(0.3333333333333333+0.6666666666666666j)

operatorモジュールの、operator.truediv(a, b)と等価です。

>>> import operator
>>> operator.truediv(5, 3)
1.6666666666666667

参考までに、operator.truediv()関数のソースコードをみてみました。(以下)
同じになるわけですね。。

# cpython/Lib/operator.py
    :
    :
def truediv(a, b):
    "Same as a / b."
    return a / b
    :
    :

// 演算子(x // y)

x と y の商を切り下げたもので、整数値を返します。
被演算子の型によって返り値の型が変わります。

# 整数型
>>> 4 // 2
2
>>> 5 // 3
1

# 浮動小数点型
>>> 4.0 // 2
2.0
>>> 5.2 // 3
1.0

尚、複素数型は使えません

>>> (1+2j)//3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for //: 'complex' and 'int'

返り値は常に負の無限大の方向に丸められます。

>>> 4//-2
-2

# 5 / (-3) = -1.666667を負の無限大方向に丸めてます 
>>> 5//-3
-2

operatorモジュールの、floordiv(a, b)と等価です。

>>> import operator
>>> operator.floordiv(5, 3)
1

/演算子と//演算子の違い

上述の通り、//演算子は商を切り下げた値になります。

  • /演算子: 商を浮動小数点で返す
  • //演算子: 商を切り下げたもので、整数値を返します

「余り」の求め方

% 演算子(x % y)

x / y の余りを整数値で返します。

>>> 4 % 2
0
>>> 5 % 3
2

operator. mod(a, b)と等価です

>>> import operator
>>> operator.mod(5, 3)
2

<参照>公式リファレンス:数値型 int, float, complex

「商」と「余り」を同時に取得する

divmod(a, b)を使います。(x // y, x % y) からなるペアを返します。

>>> divmod(4, 2)
(2, 0)
>>> divmod(5, 3)
(1, 2)

まとめ

割り算の「商」と「余り」を求める方法についてまとめました。//演算子って切り上げだっけ?切り下げだっけ?と忘れがちなので、この機会に覚えておきましょう!

参考書籍

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

シェアする
ひびきをフォローする
Hbk project