2016-11-14 3 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 от x/y. Мои чувства говорят мне, что мне нужно пройти ту же отладку для 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

Он говорит, что это должна быть строка, а не целое число. –

Смежные вопросы