2016-11-14 49 views
0

我的功能应采取一个字符串,这是一个基本x/y分数,并转换到这带分数作为一个字符串,其中a b/ca是一个整数,b/c是一个不可简化的分数。分数混合数字字符串格式

这里是我的代码:

from fractions import Fraction 
def mixed_fraction(s): 
    s = x.numerator/y.denominator 
    a = s 
    after_decimal = (a-int(a))[1:] 
    dec_2_frac = Fraction(after_decimal) 
    b = b.numerator 
    c = c.denominator 
    if y > 0: 
     return "{} {}/{}".format(a, b, c) 
    else: 
     return "ZeroDivisionError: division by zero" 

这是我的错误:

NameError: global name 'x' is not defined 

从根本上说,我可以很容易地看到如何x没有正确定义,但我不能绕到我的头怎么将x表示为x/y的对应分子x。我的感官告诉我,我需要通过相同的调试y,因此我试图在第3行定义。我只是卡住了。请帮忙!

MJ

回答

0
from fractions import gcd 

def mixed_fraction(s): 
    a = s.split('/') 
    x = float(a[0]) 
    y = float(a[1]) 
    if y == 0: 
     return "ZeroDivisionError: division by zero" 
    z = (x/y) 
    if z < 1: 
     return s 
    if z==int(z): 
     return int(z) 
    a = int(x) % int(y) 
    g = gcd(int(y), a) 
    a = a/g 
    y = y/g 
    return "%s %s/%s" % (int(z), a, int(y)) 
+0

这工作!我的下一个测试案例是说“6/3”应该等于2的输出,但我认为第12行和第13行解释了这一点,不是吗?我的理解是,这是第12行和13行...我现在的输出显示正确的结果,但需要的结果是2不是'2' –

+0

你是说你得到一个字符串,而不是一个数字你的结果? –

+0

这是说它应该是一个字符串,而不是一个整数。 –

相关问题