将字符串转换为等式并解决它

时间:2015-06-11 08:25:51

标签: python string sympy

我需要做的就是将String转换为一个简单的对象,如: "1/4*x+ 1" to 1/4*x+ 1 我从图像中提取文本并计算图像中的表达式。 如果我有: valid_text = 1/4*x+ 1= 1/6*x+ 1/2来自图片,我正在做:

if 'x' in valid_text and '=' in valid_text:
    lhs = valid_text.rsplit('=', 1)[0]
    lhs = eval(lhs)
    rhs = valid_text.rsplit('=', 1)[1]
    rhs = eval(rhs)
    solution = solve(Eq(lhs, rhs), x)

当我将String传递给它时,我使用eval()函数返回一个对象。但eval()函数有时会给出

rhs = eval(rhs)
File "<string>", line 1, in <module>
TypeError: 'int' object is not callable` **AND other inappropriate outputs.**

还有其他方法可以从String获取对象吗?

4 个答案:

答案 0 :(得分:0)

好像你想做符号演算。据我所知,python没有处理这种类型的问题,但是库简单似乎是这样做的。您可以在{{3}}

找到相关信息

另一种方法是自己开发语法和语法分析器,但如前所述,它还有很长的路要走。

祝你好运!

答案 1 :(得分:0)

如果您尝试解析的字符串代表SymPy表达式,那么sympy.parsing.sympy_parser.parse_expr看起来就像是工作的工具。

In [8]: from sympy.parsing.sympy_parser import parse_expr

In [9]: parse_expr('2*x*sin(x)')
Out[9]: 2*x*sin(x)

答案 2 :(得分:0)

这是一个完整的解决方案

from sympy import solve
from sympy.abc import x, y, z, a, b
from sympy.parsing.sympy_parser import parse_expr

def solve_meThis(string_):
    try:
        lhs =  parse_expr(string_.split("=")[0])
        rhs =  parse_expr(string_.split("=")[1])
        solution = solve(lhs-rhs)
        return solution
    except:
        print "invalid equation"

valid_text = "1/4*x+ 1 = 1/6*x+ 1/2"
solve_meThis(valid_text)

>> -6

答案 3 :(得分:0)

这对我有用:

from sympy import *
from pydoc import locate
x, y, z, p, q, r, m, n, i, j = symbols('x y z p q r m n i j')
    if 'x' in valid_text and '=' in valid_text:
        t = locate('sympy.sympify')
        lhs = valid_text.rsplit('=', 1)[0]
        lhs = t(lhs)
        rhs = valid_text.rsplit('=', 1)[1]
        rhs = t(rhs)

        solution = solve(Eq(lhs, rhs), x)