【问题标题】:Fraction to Mixed Number in String Format字符串格式的分数到带分数
【发布时间】:2016-11-14 17:17:20
【问题描述】:

我的函数应该接受一个字符串,这是一个基本的x/y 分数,并将其转换为一个带分数的字符串,a b/c 其中a 是一个整数,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 的对应分子x/y。我的感觉告诉我,我需要对y 进行相同的调试,因此我试图在第 3 行定义两者。我只是卡住了。请帮忙!

乔丹

【问题讨论】:

    标签: decimal division fractions


    【解决方案1】:
    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))
    

    【讨论】:

    • 这行得通!我的下一个测试用例说“6/3”应该等于输出 2,但我认为第 12 行和第 13 行说明了这一点,不是吗?我的理解是,这在第 12 行和第 13 行中进行了说明......我现在的输出显示了正确的结果,但需要结果为 2 而不是 '2'
    • 你是说你的结果是一个字符串而不是一个数字?
    • 它应该是一个字符串,而不是一个整数。
    • 如果你想要一个字符串改变return int(z)return str(z)
    • 当我改变它时,它表明它当然是一个字符串,但现在我的输出是一个浮点数字符串,'2.0'
    猜你喜欢
    • 2018-05-11
    • 2012-04-22
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多