Python 简化分数

Python 简化分数,python,modulo,Python,Modulo,我正在学习python,我正在尝试制作一个函数来简化分数,如果我有20/25,我想打印4/5 numerator= 20 denominator= 25 common = denominator if numerator < denominator: common = numerator if common < 1: if numerator % common == 0 or denominator % common == 0: numerator %

我正在学习python,我正在尝试制作一个函数来简化分数,如果我有20/25,我想打印4/5

numerator= 20
denominator= 25
common = denominator
if numerator < denominator:
    common = numerator
if common < 1:
    if numerator % common == 0 or denominator % common == 0:
        numerator %= common ;
        denominator %= common 
    common += 1
print('Simplified:', int(numerator) , '/', int(denominator))
分子=20
分母=25
公约数=分母
如果分子<分母:
公共=分子
如果公共值小于1:
如果分子%common==0或分母%common==0:
分子%=普通;
分母%=普通
普通+=1
打印('简化:',整数(分子),'/',整数(分母))
这就是我现在正在研究的,duno如果我的大脑停止工作,但不能再继续下去。谁能帮我找出哪里我想错了


编辑:不使用其他模块

您可以使用分数模块

from fractions import  Fraction
numerator= 20
denominator= 25

fraction_value = Fraction(numerator,denominator)
print(fraction_value)
输出

4/5

您可以使用分数模块

from fractions import  Fraction
numerator= 20
denominator= 25

fraction_value = Fraction(numerator,denominator)
print(fraction_value)
输出

4/5

如果您不想导入
math.gcd
,请自行制作:

def gcd(x,y):
而y!=0:
(x,y)=(y,x%y)
返回x
分子=20
分母=25
公共=gcd(分子、分母)
#整数除法,因为您知道gcd必须是一个因子
分子//=公共
分母//=公共
打印(f“{分子}/{分母}”)

如果您不想导入
math.gcd
,请自行制作:

def gcd(x,y):
而y!=0:
(x,y)=(y,x%y)
返回x
分子=20
分母=25
公共=gcd(分子、分母)
#整数除法,因为您知道gcd必须是一个因子
分子//=公共
分母//=公共
打印(f“{分子}/{分母}”)

您可以使用自己的GCD功能:

def GCD(a,b): 而b!=0: t=b b=a%b a=t 如果是,则返回一个!=0其他无 def fixnstr(s): s=s.rstrip(“0”).rstrip(“.”) 如果len=0: s=“0” 返回s n=浮点(输入(“输入分子:”) d=浮动(输入(“输入分母:”) gcd=gcd(n,d) n=fixnstr(str(n/gcd)) d=fixnstr(str(d/gcd)) 打印(“简化:“+n+”/“+d”)
这也会在可能的情况下删除额外的
0
s和小数点,
n
d
str
ing。

您可以使用自己的GCD功能:

def GCD(a,b): 而b!=0: t=b b=a%b a=t 如果是,则返回一个!=0其他无 def fixnstr(s): s=s.rstrip(“0”).rstrip(“.”) 如果len=0: s=“0” 返回s n=浮点(输入(“输入分子:”) d=浮动(输入(“输入分母:”) gcd=gcd(n,d) n=fixnstr(str(n/gcd)) d=fixnstr(str(d/gcd)) 打印(“简化:“+n+”/“+d”)
如果可能的话,这也会删除额外的
0
s和小数点,
n
d
str
ing。

这里有一个简单的答案,就是将分子和分母除以它们前面的所有整数(如果可以整除的话)

def fraction(numerator, denominator):
    for i in range(2, numerator+1):
         while numerator % i == 0 and denominator % i == 0:
            numerator /= i
            denominator /= i
    return f"{int(numerator)}/{int(denominator)}"
下面是另一个只需除以素数的解决方案,它还考虑了不正确的分数:

def fraction(numerator, denominator):
    # Take care of improper fractions.
    whole_number = int(numerator/denominator)
    numerator -= whole_number * denominator

    # List contraction to generate prime numbers
    primes = [x for x in range(2, numerator+1) if all(x % y != 0 for y in range(2, x))]

    # Repeatedly divide numerator and denominator by prime numbers
    for index in range(len(primes)):
        while numerator % primes[index] == 0 and denominator % primes[index] == 0:
            numerator /= primes[index]
            denominator /= primes[index]

    # Format differently for proper and improper fractions
    if whole_number == 0:
        return f"{int(numerator)}/{int(denominator)}"
    return f"{whole_number} {int(numerator)}/{int(denominator)}"

这里有一个简单的答案,只要将分子和分母除以它们前面的所有整数(如果可以整除的话)

def fraction(numerator, denominator):
    for i in range(2, numerator+1):
         while numerator % i == 0 and denominator % i == 0:
            numerator /= i
            denominator /= i
    return f"{int(numerator)}/{int(denominator)}"
下面是另一个只需除以素数的解决方案,它还考虑了不正确的分数:

def fraction(numerator, denominator):
    # Take care of improper fractions.
    whole_number = int(numerator/denominator)
    numerator -= whole_number * denominator

    # List contraction to generate prime numbers
    primes = [x for x in range(2, numerator+1) if all(x % y != 0 for y in range(2, x))]

    # Repeatedly divide numerator and denominator by prime numbers
    for index in range(len(primes)):
        while numerator % primes[index] == 0 and denominator % primes[index] == 0:
            numerator /= primes[index]
            denominator /= primes[index]

    # Format differently for proper and improper fractions
    if whole_number == 0:
        return f"{int(numerator)}/{int(denominator)}"
    return f"{whole_number} {int(numerator)}/{int(denominator)}"

将每个学期除以gcd将得到简化分数:

def gcd(a,b):  return b if a<1 else gcd(b%a,a) # or use math.gcd
def frac(n,d): c=gcd(n,d);return n//c,d//c

将每个学期除以gcd将得到简化分数:

def gcd(a,b):  return b if a<1 else gcd(b%a,a) # or use math.gcd
def frac(n,d): c=gcd(n,d);return n//c,d//c

使用最大公约数函数(
math.gcd
)。任何不导入模块的方法?使用最大公约数函数(
math.gcd
)。任何不导入模块的方法?编辑,不使用模块编辑,不使用模块