简化分数函数在 Python 中无法正常工作

Simplify fraction function does not work properly in Python

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

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))它 returns (4, 6)。我希望它是 (2, 3)。对得到这个结果有什么帮助吗? 注意! 我想在不使用 import math

的情况下得到结果

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

使用您的方法,只需找到所得分子和分母的 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

一种选择是使用 python

中的分数模块
>>>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,所以我们不需要 floor division(//),因为我们知道 d1d2 将是被 g

整除