36. Максимальное сокращение дробей.
Условие:
Напишите функцию, принимающую на вход два целочисленных параметра, представляющих числитель и знаменатель дроби.
В теле функции должно выполняться максимально возможное сокращение дроби, а полученные в итоге числитель и знаменатель должны быть возвращены исходной программе.
Например, если на вход функции передать числа 6 и 63, числитель и знаменатель итоговой дроби должны быть 2 и 21.
В основной программе нужно запросить у пользователя числитель и знаменатель исходной дроби, передать их в функцию и вывести на экран результат.
Код:
def my_simplify(numerator, denomenator):
min_value = min(numerator, denomenator)
divider = 2
while divider <= min_value:
if numerator % divider == 0 and denomenator % divider == 0:
numerator /= divider; denomenator /= divider; min_value /= divider
divider = 2
else:
divider += 1
return (int(numerator), int(denomenator))
while True:
numerator = input("%100s" % "Введите числитель дроби (целое число): ")
denomenator = input("%100s" % "Введите знаменатель дроби (целое число): ")
print()
try:
numerator = int(numerator)
denomenator = int(denomenator)
if denomenator == 0:
print(("%99s" % "Знаменатель не может быть равным нулю."))
continue
break
except:
print("%99s" % "Вы допустили ошибку при вводе.")
if numerator in [0, 1, -1] or denomenator in [1, -1]:
result = (numerator, denomenator)
else:
result = my_simplify(numerator, denomenator)
print("%99s" % "Сокращённая дробь:", f"{result[0]}/{result[-1]}")