#python #function #fractions
#python #функция #дроби
Вопрос:
я создал упрощающую функцию, и она работает нормально, но не идеально.
def gcd(a, b):
while b > 0:
if a == 0:
return b
a, b = b, (a % b)
def add_frac(n1, d1, n2, d2):
g = gcd(d1, d2)
frac = (((n1 * d2) (n2 * d1)) // g, (d1 * d2) // g)
return frac
когда я пытаюсь: print(add_frac(1, 2, 1, 6))
он возвращает (4, 6). Я хочу, чтобы это было (2, 3). Любая помощь для получения этого результата? Внимание!Я хотел бы получить результат без использования import math
Пример, который работает: print (add_frac(1, 2, 1, 4))
дает (3, 4)
Ответ №1:
Используя вашу методологию, просто найдите GCD результирующего числителя и знаменателя и разделите на это
def add_frac(n1, d1, n2, d2):
num = (n1*d2 n2*d1)
den = d1*d2
g = gcd(num,den)
return num/g, den/g
Комментарии:
1. Это работает, но результатом является значение с плавающей запятой. Где бы я мог ее изменить, чтобы получить interger?
2. Вы можете разделить пол
//
вместо обычного разделения.
Ответ №2:
Одним из вариантов было бы использовать модуль дроби в python
>>>print(Fraction(1, 2) Fraction(1, 6))
>>>2/3
Или, если вы хотите написать собственный код на python, измените метод gcd на
def gcd(a,b):
if(b==0):
return a
else:
return gcd(b,a%b)
и добавьте метод_frac к
def add_frac(n1, d1, n2, d2):
g = gcd(d1, d2)
frac = ((d1/g)*n1 (d2/g)*n2, g)
return frac
Обратите внимание, что, поскольку мы уже нашли gcd, нам не нужно разделение по этажам (//), поскольку мы знаем, что d1 и d2 будут делиться на g