Калькулятор дробей в обходном пути Python
Итак, мне нужно создать скрипт Python, который задает 2 дроби, а операнд будет печатать результат операции. Это предполагалось решить, сначала запросив одну дробь и сохранив ее в переменной, затем запросив другую дробь и, наконец, запросив операнд. Но из любопытства я попытался взглянуть на эту проблему с другой точки зрения. Моя идея состояла в том, чтобы запросить полную операцию и сохранить входную строку в переменную, затем с помощью функции exec() я мог получить десятичный результат данной операции, наконец, чтобы иметь дело с десятичными дробями, моя идея состояла в том, чтобы умножить на 10 до степень числа десятичных цифр, а затем деление на 10 в той же степени, таким образом, я мог получить дробь в результате. Итак, я перешел к коду и сумел запрограммировать это, моя единственная проблема заключается в том, что количество десятичных цифр ограничено, поэтому обычно результат, который возвращает мой скрипт, представляет собой очень большую дробь, которая очень близка к реальной дроби.
op = input('Введите операцию:') пытаться: exec('a = ' + op) кроме: print('Неверная операция') по евклидам (а, б): а != 0 и б != 0: если a < b: b = b%a иначе: а = а%б если a == 0: вернуть b Элиф б == 0: вернуть а print(f'{int(a*10**len(str(a).split(".")[1])/euclides(a*10**len(str(a).split(".") [1]),10**len(str(a).split(".")[1])))}/{int(10**len(str(a).split(".")[1 ])/евклиды (a*10**len(str(a).split(".")[1]),10**len(str(a).split(".")[1]))) }')
ПРИМЕР:
- операционный ввод => 4/3+5/7
- Результат скрипта => 511119/2500000000000000 = 2.047611
- Результат, который я ищу => 43/21 = 2,047619 период
Заранее спасибо за помощь
- python
16
Каковы ваши ограничения в отношении того, какие стандартные или дополнительные модули вы можете использовать? Без учета ограничений, которые вы не указали, есть гораздо лучшие способы сделать то, что вы делаете. Ваша проблема, кажется, резюмируется словами «результат, который возвращает мой скрипт, является очень большой долей», и ваш вопрос, кажется, звучит так: «Мне было интересно, есть ли какое-либо обходное решение для этого?». Есть ряд «обходных путей». Но довольно сложно угадать, какое решение будет лучшим для вас, поскольку вы не говорите нам, какие инструменты вы можете и не можете использовать для выполнения своей задачи.
В качестве примера, вот элегантное решение, если вы можете использовать регулярные выражения и модуль дробей
, и если вы можете предположить, что ввод всегда будет в очень строгом формате
:
импорт повторно импортные фракции op = input('Введите операцию:') m = re.match(r"(\d+)/(\d+)\+(\d+)/(\d+)", op) если не м: поднять('Неверная операция') GPS = список (карта (int, m.groups ())) f = дроби. Дробь (gps [0], gps [1]) + дроби. Дробь (gps [2], gps [3]) печать (е) печать (с плавающей запятой (f)) печать (раунд (с плавающей запятой (f), 6))
Результат:
43/21 2. 047611
2.047619
Это ответ на ваш текущий вопрос. Однако я не знаю, нарушает ли это условия вашего задания.
Можно просто преобразовать все натуральные числа в Дробь
и вычислить:
>>> op = '4/3+5/7' >>> импорт re, дроби >>> print(eval(re.sub(r'(\d+)', r'fractions.Fraction(\1)', op))) 43/21
Работает и для других случаев (в отличие от решения принятого ответа, которое делает только сумма ровно двух дробей, которые должны быть положительными и не должны содержать пробелов), например:
>>> op = '-1/2 + 3/4 - 5/6' >>> print(eval(re.sub(r'(\d+)', r'fractions.Fraction(\1)', op))) -7/12
Проверка:
>>> -7/12, -1/2 + 3/4 - 5/6 (-0,5833333333333334, -0,58333333333333334)
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Требуется, но не отображается
Графики с ограничениями на калькулятор переменных
|