Python 简化分数
我正在学习python,我正在尝试制作一个函数来简化分数,如果我有20/25,我想打印4/5Python 简化分数,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 %
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
)。任何不导入模块的方法?编辑,不使用模块编辑,不使用模块