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