1

整数と分数を取り、それらを加算するクラスのこの部分があります。

def __add__(self, g):
       whole_add=self.whole_number + g.whole_number
       numerator = (self.fraction.numerator * g.fraction.denominator ) + (g.fraction.numerator * self.fraction.denominator)
       denominator = self.fraction.denominator * g.fraction.denominator
       f=Fraction(numerator,denominator)
       return '{} and {}'.format(whole_add,f)

fraction_1 = Fraction(3, 4)
fraction_2 = Fraction(2, 3)
mixed_num_1 = MixedNumber(2, fraction_1)
mixed_num_2 = MixedNumber(1, fraction_2)
print(mixed_num_1 + mixed_num_2)

この結果は 3 と 17/12 です。4 と 5/12 になるはずですが、これを行う方法がわかりません。分数が >= 1 であると仮定します。

4

2 に答える 2

3

fractionsライブラリを使用している場合は、すべてを合計してint()から、分数の一部を取ることができます。

def __add__(self, g):
    summed = sum((self.whole_number, g.whole_number, self.fraction, g.fraction))
    whole = int(summed)
    remainder = summed - whole
    return '{} and {}'.format(whole, remainder)

Fraction()クラスが実装__add__します。整数とオブジェクトを合計するだけでFraction()、すべて正常に機能します。

定数を使用したデモ:

>>> from fractions import Fraction
>>> summed = sum((2, 1, Fraction(3, 4), Fraction(2, 3)))
>>> whole = int(summed)
>>> remainder = summed - whole
>>> '{} and {}'.format(whole, remainder)
'4 and 5/12'

あまり知られていないが便利なファクトイドの 1 つは、Python のint()型には と の両方.numerator.denominator属性があり、fractions.Fraction()クラスが利用するということです。ライブラリを使用していない場合fractionsは、自分で使用できます。

def __add__(self, g):
    summed = 0
    for v in (self.whole_number, g.whole_number, self.fraction, g.fraction):
        summed = Fraction(summed.numerator * v.denominator +
                          v.numerator * summed.denominator,
                          summed.denominator * v.denominator)
    whole = summed._numerator // summed._denominator
    remainder = Fraction(summed.numerator * whole.denominator -
                         whole.numerator * summed.denominator,
                         summed.denominator * whole.denominator)
    return '{} and {}'.format(whole, remainder)
于 2013-05-23T23:13:48.580 に答える