python - 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])))}')
例子:
- 运算输入 => 4/3+5/7
- 脚本结果 => 5119047619047619/2500000000000000 = 2.04761904761
- 结果我正在寻找 => 43/21 = 2.047619 期间
提前谢谢你的帮助
解决方案
您对可以使用哪些标准或附加模块有什么限制?在不考虑您未指定的约束的情况下,有更好的方法来处理您正在做的事情。您的问题似乎可以通过“我的脚本返回的结果占很大一部分”来概括,而您的问题似乎是“我想知道是否有任何解决方法?”。有许多“解决方法”。但是很难猜测最适合您的解决方案是什么,因为您没有告诉我们您可以使用哪些工具来完成您的任务,不能使用哪些工具。
例如,如果您可以使用正则表达式和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
这回答了您当前的问题。但是,我不知道这是否违反了您的任务条款。
推荐阅读
- c# - 输入字符串的格式不正确。文本更改问题
- angular - 如何使用单击从数组中删除项目(id)?
- android - Admob Native Advanced -> 智能横幅兼容模板
- javascript - 如何使用 JavaScript 触发模态?
- c# - System.Collections.Specialized.StringCollection 设置在调试和发布中工作正常,但在部署时崩溃?
- python - 需要帮助在 python 中制作一个简单的字典
- google-app-engine - 添加 self.response.headers['Access-Control-Allow-Origin'] = '*' 不会做任何事情。webapp2
- node.js - 插入到使用 oracle 数据库在 Node.js 上不工作
- reactjs - 在 heroku 上托管我的反应应用程序时,api 调用不起作用
- javascript - 如何将毫秒转换为日期(月份中的某天)?