首页 > 解决方案 > python解决方法中的分数计算器

问题描述

所以,我必须创建一个给定 2 个分数的 python 脚本,一个操作数将打印操作的结果。这旨在通过首先要求一个分数并将其保存到变量中来解决,然后要求另一个分数,最后要求操作数。但出于好奇,我试图从不同的角度来看待这个问题。我的想法是要求完整的操作并将输入字符串保存到一个变量中,然后使用函数 exec() 我可以得到给定操作的十进制结果,最后处理小数我的想法是乘以 10 到小数位数的幂,然后除以 10 到相同的幂,这样我就可以得到一个分数。所以我继续编写代码并设法将其编程出来,我唯一的问题是小数位数是有限的,所以通常我的脚本返回的结果是一个非常大的分数,非常接近实际分数。所以我想知道是否有任何解决方法。这是我的代码和进一步解释的示例:

op = input('Enter operation: ')
try:
    exec('a = ' + op)
except:
    print('Invalid operation')
def euclides(a, b):
    while a != 0 and b != 0:
        if a < b: b = b%a
        else: a = a%b
    if a == 0: return b
    elif b == 0: return a
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])/euclides(a*10**len(str(a).split(".")[1]),10**len(str(a).split(".")[1])))}')

例子:

  1. 运算输入 => 4/3+5/7
  2. 脚本结果 => 5119047619047619/2500000000000000 = 2.04761904761
  3. 结果我正在寻找 => 43/21 = 2.047619 期间

提前谢谢你的帮助

标签: python

解决方案


您对可以使用哪些标准或附加模块有什么限制?在不考虑您未指定的约束的情况下,有更好的方法来处理您正在做的事情。您的问题似乎可以通过“我的脚本返回的结果占很大一部分”来概括,而您的问题似乎是“我想知道是否有任何解决方法?”。有许多“解决方法”。但是很难猜测最适合您的解决方案是什么,因为您没有告诉我们您可以使用哪些工具来完成您的任务,不能使用哪些工具。

例如,如果您可以使用正则表达式和fractions模块,并且您可以假设输入将始终采用非常严格的格式,那么这是一个优雅的解决方案<int>/<int>+<int>/<int>

import re
import fractions

op = input('Enter operation: ')

m = re.match(r"(\d+)/(\d+)\+(\d+)/(\d+)", op)
if not m:
    raise('Invalid operation')
gps = list(map(int, m.groups()))

f =  fractions.Fraction(gps[0], gps[1]) + fractions.Fraction(gps[2], gps[3])

print(f)
print (float(f))
print(round(float(f), 6))

结果:

43/21
2.0476190476190474
2.047619

这回答了您当前的问题。但是,我不知道这是否违反了您的任务条款。


推荐阅读