LoginSignup
2
0

More than 3 years have passed since last update.

Pythonビルトインの分数を扱うfractionsパッケージについて軽く調べてみた。

Posted at

今更ながら分数を扱うPythonビルトインのfractionsパッケージという存在を知ったので、どんな挙動をするものなのかを軽く調べておきます。

記事内で使う環境

Python 3.8.6を使います。残りはビルトインのfractionsパッケージだけ使っていきます。

基本の使い方

まずは扱うためにfractionsパッケージのimportが必要になります。特にFractionクラスが利用のメインとなるため、そちらをimportします。

from fractions import Fraction

Fraction(分数)クラスはnumerator(分子)という第一引数とdenominator(分母)という第二引数を受け付けます。

f = Fraction(numerator=3, denominator=4)

インタラクティブシェルやJupyter上でFractionクラスのインスタンスを表示してみると、分子と分母の値を含んだ形でrepr的に表示されます。

>>> f

Fraction(3, 4)

print関数を通してみると、3/4といったような形で表示されます。

>>> print(f)

3/4

intやfloatとの比較ができる

Fractionインスタンスはそのままintやfloatと比較ができるようです。

intとの比較
>>> f = Fraction(numerator=4, denominator=4)
>>> f == 1

True
floatとの比較
>>> f = Fraction(numerator=3, denominator=4)
>>> f == 3 / 4

True

intの値であれば四則演算してもFractionが返る

Fractionのインスタンスに対してintなどで四則演算した場合はそのままFractionのインスタンスが返ります。

>>> Fraction(3, 4) + 1

Fraction(7, 4)
>>> Fraction(5, 4) - 1

Fraction(1, 4)
>>> Fraction(3, 4) * 2

Fraction(3, 2)

Fraction同士の四則演算もFractionが返る

Fraction同士を加算したりすると結果もFractionのインスタンスになります。

>>> Fraction(1, 4) + Fraction(1, 4)

Fraction(1, 2)

Fraction + Fraction + intみたいな計算でもFractionがそのまま返ります。

>>> Fraction(1, 4) + Fraction(1, 4) + 1

Fraction(3, 2)

floatの値で四則演算するとfloatが返る

Fractionとfloatの値で四則演算すると結果はfloatになります。

>>> Fraction(3, 4) + 1.5

2.25

分母(denominator)の引数は省略できる

第一引数の分子(numerator)の引数にfloatを指定することで、分母のdenominator引数を省略してもFractionインスタンスを作ることができます。

>>> Fraction(numerator=0.25)

Fraction(1, 4)
>>> Fraction(numerator=0.26)

Fraction(1170935903116329, 4503599627370496)
>>> 1170935903116329 / 4503599627370496

0.26

numerator引数には文字列も指定できる

1/4といったような、半角のスラッシュを使った文字列もnumerator引数に指定することができます。

>>> Fraction(numerator='1/4')

Fraction(1, 4)

自動で約分される

Fractionのインスタンスを作ったり計算などをした際に約分できる場合には約分が自動で実行されます。

>>> Fraction(2, 4)

Fraction(1, 2)
>>> Fraction(1, 6) + Fraction(1, 6)

Fraction(1, 3)

limit_denominator メソッドで無理数の近似の値を取得することができる

無理数を指定した場合などに、最大の分母の値(max_denominator引数)を指定することで、その値以下になる範囲で近似値を取得することができます。

>>> Fraction(3.14159265359)

Fraction(3537118876014453, 1125899906842624)
分母が10以下に制限される設定
>>> Fraction(3.14159265359).limit_denominator(max_denominator=10)
Fraction(22, 7)

>>> 22 / 7
3.142857142857143
分母が150以下に制限される設定
>>> Fraction(3.14159265359).limit_denominator(max_denominator=150)
Fraction(3.14159265359).limit_denominator(max_denominator=150)

>>> 355 / 113
3.1415929203539825

参考文献・参考サイト

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0