【问题标题】:Simplify fraction function does not work properly in Python简化分数函数在 Python 中无法正常工作
【发布时间】:2020-11-20 16:36:47
【问题描述】:

我做了一个简化函数,它工作正常,但并不完美。

def gcd(a, b):

    while b > 0:
        if a == 0:
            return b
        a, b = b, (a % b)

def add_frac(n1, d1, n2, d2):

    g = gcd(d1, d2)
    
    frac = (((n1 * d2) + (n2 * d1)) // g, (d1 * d2) // g)
    return frac

当我尝试时:print(add_frac(1, 2, 1, 6))它返回 (4, 6)。我希望它是 (2, 3)。有什么帮助可以得到这个结果吗? 注意!我想在不使用import math的情况下得到结果

有效的示例: print(add_frac(1, 2, 1, 4)) 给出 (3, 4)

【问题讨论】:

    标签: python function fractions


    【解决方案1】:

    使用您的方法,只需找到生成的分子和分母的 GCD 并除以它

    def add_frac(n1, d1, n2, d2):
        num = (n1*d2 + n2*d1)
        den = d1*d2
        g = gcd(num,den)
        return num/g, den/g
    

    【讨论】:

    • 这可行,但结果是浮点数。我在哪里可以得到一个整数?
    • 您可以使用地板除法// 而不是普通除法。
    【解决方案2】:

    一种选择是在 python 中使用 Fractions 模块

    >>>print(Fraction(1, 2) + Fraction(1, 6))
    >>>2/3
    

    或者如果你想编写自己的python代码,那么将gcd方法更改为

    def gcd(a,b):
        if(b==0):
            return a
        else:
            return gcd(b,a%b)
    

    和 add_frac 方法

    def add_frac(n1, d1, n2, d2):
    
        g = gcd(d1, d2)
        frac = ((d1/g)*n1 + (d2/g)*n2, g)
        return frac
    

    请注意,由于我们已经找到了 gcd,所以我们不需要地板除法(//),因为我们知道 d1d2 将被 g 整除em>

    【讨论】:

      猜你喜欢
      • 2018-07-23
      • 1970-01-01
      • 2019-03-05
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      相关资源
      最近更新 更多