python工作区中的分数计算器

2024-06-25 23:07:56 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我必须创建一个python脚本,其中给定2个分数,一个操作数将打印操作结果。解决这个问题的方法是,首先请求一个分数并将其保存到变量中,然后请求另一个分数,最后请求操作数。但是出于好奇,我试着从不同的角度来看待这个问题。 我的想法是要求进行完整运算并将输入字符串保存到一个变量中,然后使用函数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/250000000000000=2.04761904761
  3. 我要寻找的结果=>;43/21=2.047619周期

提前谢谢你的帮助


Tags: 代码gt脚本lenreturnifoperation分数
2条回答

可以将所有自然数转换为Fraction并计算:

>>> op = '4/3+5/7'
>>> import re, fractions
>>> 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.5833333333333334)

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

例如,如果您可以使用正则表达式和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

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

相关问题 更多 >