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

如果您使用的是fractionslibrary,您可以将所有内容相加,然后取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'

一个鲜为人知但很方便的事实是,Pythonint()类型同时具有.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 回答
1

“修复”您的版本的一种方法是直接处理假分数:

   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
   whole_add += numerator // denominator
   numerator -= numerator % denominator
   f=Fraction(numerator,denominator)
   return '{} and {}'.format(whole_add,f)

尽管有更有效的方法可以更直接地进行此添加。

于 2013-05-23T23:16:24.627 回答