2016-11-14 51 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

這是說它應該是一個字符串,而不是一個整數。 –