Как упростить значение дроби переменной в Python - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть переменная с именем b, значение которой определяется следующим образом: b = float(input("What is your y-intercept?")).Позже в файле я хочу взять значение b (при условии, что это число с плавающей точкой) и преобразовать его в дробь, подобную этой: print(Fraction(b)).Я знаю, что что-то вроде print(Fraction(0.45)) напечатает 8106479329266893/18014398509481984, но print(Fraction('0.45')) напечатает 9/20.Как я могу получить тот же результат с переменной?Выполнение print(Fraction('b')) дает мне эту ошибку: ValueError: Invalid literal for Fraction: 'b'.

Код:

from fractions import Fraction

elif equation == 'slope':    
    slope = input("Do you need to find slope? Type 'yes' or 'no'.")

    if slope == 'yes':
       y2 = float(input("What's your y2 value?:"))
       y1 = float(input("What is your y1 value?"))
       x2 = float(input("What is your x2 value?:"))
       x1 = float(input("What is your x1 value?:"))

        m = y2-y1/x2-x1
        print(str(m))
    elif slope == 'no':
        m = input("What is the slope?")

    b = float(input("What is your y-intercept?"))
    m = str(m)
    b = str(b)
    print("Your equation is: y = {}x + {}".format(m,b))
    simplify = input("Do you want to simplify this to standard form? Type in 'yes' or 'no'")

    if simplify == 'yes':
        m = float(m)
        b = float(b)
        if m < 0:
            pos_m = m*-1
        if isinstance(b, float):
            print(Fraction(b)) #Works, but not what I want
            print(Fraction('b')) #Does not work 

Ответы [ 4 ]

0 голосов
/ 19 сентября 2019

Почему вы используете переменную типа float?Лучше использовать функцию int () для простого ответа.Создает целое число вместо добавления десятичной дроби.

0 голосов
/ 19 сентября 2019

Как уже упоминалось в @Prune, вы должны преобразовать значение переменной в строку, одна альтернатива - это f-строка :

from fractions import Fraction
b = 0.45
print(Fraction(f'{b}'))

Предлагаемое решение по документации заключается в использовании limit_denominator :

b = 0.45
print(Fraction(b).limit_denominator())

Выход

9/20

Подробнее о плавающей точке см. this .

0 голосов
/ 19 сентября 2019

Причина, по которой print(Fraction('b')) не работает, заключается в том, что вы просите python создать дробь из символа 'b'.Что вам нужно сделать, это получить строковое представление b, которое будет str (b), поэтому Fraction(str(b))

0 голосов
/ 19 сентября 2019
Fraction(str(b))

Таким образом вы конвертируете значение переменной (а не ее * имя) в строку.

...