PYTHON MEBY

Pythonで分数演算(fractions.Fraction)

この記事では、Pythonのfractionsモジュールを使って分数演算を行う方法を説明します。fractions.Fractionクラスの使い方、基本的な演算、便利なメソッドなどについて解説します。

目次

fractions.Fractionクラスの概要

Pythonの`fractions`モジュールは、分数を正確に扱うためのクラス`Fraction`を提供しています。`Fraction`クラスを使うことで、浮動小数点数の近似値ではなく、真の分数として計算を行うことができます。

import fractions
# Fractionクラスをインポート

このモジュールを使うと、浮動小数点演算で発生する丸め誤差を回避し、正確な分数計算を行うことができます。

分数オブジェクトの作成

分数オブジェクトは、分子と分母を指定して作成します。

from fractions import Fraction

# 分数オブジェクトの作成
fraction1 = Fraction(3, 4)  # 3/4
fraction2 = Fraction(1, 2)  # 1/2
fraction3 = Fraction(1, 0) # ゼロ除算エラーが発生する

分子と分母は整数である必要があります。分母が0の場合は`ZeroDivisionError`が発生します。また、文字列から分数オブジェクトを作成することも可能です。

fraction4 = Fraction('3/4')  # 文字列から分数オブジェクトを作成
fraction5 = Fraction('-1/2') # 負の分数も作成可能
fraction6 = Fraction('0.75') # 小数から分数オブジェクトを作成

基本的な演算

分数オブジェクトは、標準的な算術演算子をサポートしています。

from fractions import Fraction

fraction1 = Fraction(3, 4)
fraction2 = Fraction(1, 2)

# 加算
addition = fraction1 + fraction2
print(f'加算: {addition}')  # 出力: 加算: 5/4

# 減算
subtraction = fraction1 - fraction2
print(f'減算: {subtraction}') # 出力: 減算: 1/4

# 乗算
multiplication = fraction1 * fraction2
print(f'乗算: {multiplication}') # 出力: 乗算: 3/8

# 除算
division = fraction1 / fraction2
print(f'除算: {division}')  # 出力: 除算: 3/2

これらの演算の結果は、常に既約分数として表現されます。

便利なメソッド

Fractionクラスは、分数の簡約化や浮動小数点数への変換など、便利なメソッドを提供しています。

from fractions import Fraction

fraction1 = Fraction(6, 8)

# 簡約化
simplified = fraction1.limit_denominator(1000) # 1000以下の分母で簡約化
print(f'簡約化: {simplified}') # 出力: 簡約化: 3/4

# 浮動小数点数への変換
float_value = fraction1
print(f'浮動小数点数: {float_value}') # 出力: 浮動小数点数: 0.75

`limit_denominator()`メソッドは、指定した最大分母以下の既約分数に変換します。これは、近似値が必要な場合に役立ちます。`float()`関数を使って、分数オブジェクトを浮動小数点数に変換できます。

その他の機能

Fractionクラスは、他にも様々な機能を提供しています。例えば、比較演算子、`__str__`メソッドによる文字列表現、`numerator`属性と`denominator`属性による分子と分母の取得などが可能です。

from fractions import Fraction

fraction1 = Fraction(3, 4)
fraction2 = Fraction(1, 2)

# 比較
print(f'fraction1 > fraction2: {fraction1 > fraction2}') # 出力: fraction1 > fraction2: True

# 文字列表現
print(f'fraction1: {fraction1}') # 出力: fraction1: 3/4

# 分子と分母の取得
print(f'fraction1の分子: {fraction1.numerator}') # 出力: fraction1の分子: 3
print(f'fraction1の分母: {fraction1.denominator}') # 出力: fraction1の分母: 4

関連記事