python - 获取数学方程中的表达式
问题描述
我有一个等式,我在一个类似的文件中得到(((2+1)*(4+5))/2)
。我正在寻找的是其中不同的数学表达式。在这种情况下:
2+1
4+5
(2+1)*(4+5)
最后((2+1)*(4+5))/2
。
我从查看这些开始我如何在 python 中拆分一串数学表达式? 但无法得出解决方案..
你能帮忙吗?
解决方案
您可以通过遍历字符串来制作一个简单的解析器,每次找到左括号时,将索引推送到堆栈。当你找到一个右括号时,弹出堆栈中的最后一个东西,并从那里取出一个切片到你现在所在的位置:
stack = []
s = "(((2+1)*(4+5))/2)"
for i, c in enumerate(s):
if c == "(":
stack.append(i+1)
if c == ")":
f = stack.pop()
print(s[f:i])
结果
2+1
4+5
(2+1)*(4+5)
((2+1)*(4+5))/2
如果pop()
不起作用,或者完成后堆栈中还剩下一些东西,则说明您没有平衡括号——这可以充实以进行错误检查。
推荐阅读
- c# - 返回带有 asp.net core api 错误的自定义对象
- dialogflow-es - 如何使用 Dialogflow 将 3rd 方 API 连接到 Google Actions?
- python - Python:在游戏中添加计数器
- python-2.7 - 具有有限权限的 xlsxwriter 工作表保护功能
- highcharts - highcharts 第一个和最后一个类别宽度
- javascript - new Function(...).call() 在 chrome 中创建内存泄漏
- c - 在现有的 R 包中模仿 C 的用法
- r - 如何根据其位置加入两列?
- c - 如何在C中将可变大小的int数组初始化为0?
- python - 使用分组依据的追踪或移动平均线