使用Python定义命名分数 使用函数定义而不使用a / b格式的导入和返回 例子
分数(9,24) 结果=> 3/8
我不太会英语,所以我真的不知道真正的分数是多少。 我的学校只用我的国家的语言授课。
def fraction(a,b):
return a ? b ?
fraction(9,24)
答案 0 :(得分:3)
分数是写为a/b
的数字,因此小数点0.4
等于分数4/10
等于缩小的(最简单的)分数2/5
。
有很多方法可以做您想要的。最简单的方法可能是使用fractions.Fraction
类(尽管如果这是一种学校习作,则可能被认为是作弊行为):
from fractions import Fraction
def fraction(a, b):
''' return simplest fraction as a string of the form a/b '''
fr = Fraction(a, b)
return '{}/{}'.format(fr.numerator, fr.denominator)
示例:
fraction(9, 27) # --> '1/3'
答案 1 :(得分:2)
无需使用fractions
模块,您只需计算a
和b
的{{3}},然后将两者除以以“归一化” {{3} }。
def fraction(a, b):
g = gcd(a, b)
return "%d / %d" % (a // g, b // g)
示例:
>>> gcd(9, 24)
3
>>> fraction(9, 24)
'3 / 8'
gcd
的实施留给读者练习(或使用math.gcd
)
答案 2 :(得分:1)
没有分数模块,调用factorise(9,24)会将a_ret返回为3,将b_ret返回为8。
def prime_factors(n):
i = 2
factors = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors.append(i)
if n > 1:
factors.append(n)
return factors
def factorise(a,b):
a_list = prime_factors(a)
a1_list = a_list
b_list = prime_factors(b)
b1_list = b_list
for x in a_list:
if x in b1_list:
b1_list.remove(x)
a1_list.remove(x)
for x in b_list:
if x in a1_list:
a1_list.remove(x)
b1_list.remove(x)
a_ret = 1
b_ret = 1
for x in a1_list:
a_ret *= x
for x in b1_list:
b_ret *= x
print(a_ret,b_ret)
答案 3 :(得分:1)
我们可以通过查看最大为最小值的任意数字是否将两者相除来找到分数的最大简化形式-然后我们可以递归调用分数以处理进一步的迭代:
def fraction( numerator, denominator):
min_val = min(numerator, denominator)
# We go from 2 -> min_val here,
# skipping 1 because every number is divisible by one and it gets us nowhere
for divisor in range(2, min_val+1):
if (numerator % divisor == 0 and denominator % divisor == 0):
# We know the fraction can be reduced,
# because divisor divides both numerator and denominator
return(fraction(numerator / divisor, denominator / divisor))
return('{}/{}'.format(numerator, denominator))
测试输出:
>>> fraction(5, 10)
'1/2'
如果您有任何问题要告诉我,有时递归有点奇怪,但是它功能强大,使我们的生活变得简单得多