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

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

Pythonで割り算の商と余りを求める方法についてまとめます。
/演算子と//演算子はどちらも”商”が出力されますが、その違いは?
また、divmod()は商と余りを同時に求めることができる便利な関数です。
今回はこれらを改めて整理してみました。
# 2019/6/2 記事更新

確認した環境

  • Ubuntu16.04LTS
  • Python3.7.2@Anaconda

商を求める

/ 演算子(x / y)

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

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

>>> 5 / 3
1.6666666666666667

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: can't take floor of complex number.

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

>>> 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