from fractions import Fraction
from functools import reduce
def product(fracs): ## fracs is a list of Fraction objects from the subsequent function call
t = Fractions(reduce(lambda x,y: x.numerator * y.numerator,fracs), reduce(lambda x,y: x.denominator * y.denominator, fracs))
return t.numerator, t.denominator
if __name__ == '__main__':
fracs = []
for _ in range(int(input())):
fracs.append(Fraction(*map(int, input().split())))
result = product(fracs)
print(*result)我正在尝试使用Python3函数工具的分数函数将一系列分数相乘。我遇到的问题是product(fracs)函数中t变量的分母边界。在使用以下测试用例进行测试时:
3
1 2
3 4
10 6
5 1输出是5 1。分子似乎工作得很好,但分母的情况却不太好。我意识到并找到了解决我的问题的替代方案,但我希望这个谜团能得到解答。我已经通过python tutor运行了它,但我无法破译代码的行为。
发布于 2021-01-02 20:59:24
我认为这就是你使用reduce的方式。第一次调用它时,您传递的是两个Fraction对象:
Fraction(1,2).denominator * Fraction(3,4).denominator它返回8,这是您所期望的。但是,reduce函数并没有将这个8设为小数,因此下一次对reduce的调用如下所示:
8.denominator * Fraction(10,6).denominator这是6,而不是预期的48。分子不存在此问题,因为对于Int X:
X = X.numerator因此,你在分子中得到30,在分母中得到6,这就减少到5。
我不熟悉Fraction类,但看起来您可能是在重新发明轮子。
我怀疑你可以将分数对象相乘,但它的乘法操作符是重载的:
def product(fracs):
return reduce(lambda x,y: x * y, fracs)https://stackoverflow.com/questions/65538814
复制相似问题