本記事ではPythonで分数を計算する方法を解説します。
Pythonで分数を計算するには標準ライブラリfractionsモジュールを使う方法と、代数計算ライブラリのSymPyを使う方法があります。
標準ライブラリfractionsモジュールを使う方法
まずは、標準ライブラリfractionsモジュールを使う方法を紹介します。
例として、1/2 + 1/3 = 5/6をライブラリを使って計算してみましょう。
下記で分数の計算が可能です。
from fractions import Fraction
# 1/2
frac1 = Fraction(1, 2)
# 1/3
frac2 = Fraction(1, 3)
print(frac1+frac2) # 5/6
もちろん、他に引き算、掛け算、割り算も可能です。
from fractions import Fraction
# 1/2
frac1 = Fraction(1, 2)
# 1/3
frac2 = Fraction(1, 3)
print(frac1-frac2) # 1/6
print(frac1*frac2) # 1/6
print(frac1/frac2) # 3/2
また、約分も可能です。
from fractions import Fraction
# 3/6
frac1 = Fraction(3, 6)
print(frac1) # 1/2
さらに、分数から小数点に変換することも可能です。
from fractions import Fraction
# 1/2
frac1 = Fraction(1, 2)
print(float(frac1)) # 0.5
続いて、小数点から分数に変換することもできます。
from fractions import Fraction
print(Fraction(0.5)) # 1/2
しかし、循環小数はあまりうまく小数点から分数に変換できません。
その場合、limit_denominator()
メソッドを使用することで近似値を算出できます。
from fractions import Fraction
# NG
print(Fraction(0.3333333333333333)) # 6004799503160661/18014398509481984
# OK
print(Fraction(0.3333333333333333).limit_denominator()) # 1/3
SymPyライブラリを使う方法
続いてSymPyを使用して分数を計算できます。
まずは、SymPyをインストールする必要があります。下記コマンドでSymPyをインストールします。
pip install sympy
from sympy import Rational
# 1/2
frac1 = Rational(1, 2)
# 1/3
frac2 = Rational(1, 3)
# 足し算
print(frac1+frac2) # 5/6
# 引き算
print(frac1-frac2) # 1/6
# 掛け算
print(frac1*frac2) # 1/6
# 割り算
print(frac1/frac2) # 3/2
# 約分
print(Rational(3, 6)) # 1/2
# 分数から小数に変換
print(float(Rational(1, 2))) # 0.5
# 小数から分数に変換
print(Rational(0.5)) # 1/2
# 循環小数から分数に変換(NG)
print(Rational(0.3333333333333333)) # 6004799503160661/18014398509481984
# 循環小数から分数に変換(OK)
print(Rational(0.3333333333333333).limit_denominator()) # 1/3
