Python 2.7 “评估字符串”;1+;2^4*4*(4&x2B;4*9)-10“;

Python 2.7 “评估字符串”;1+;2^4*4*(4&x2B;4*9)-10“;,python-2.7,parsing,Python 2.7,Parsing,我正在尝试评估这个字符串。“1+2^4*4*(4+4*9)-10” 我的策略是获取每个元素,将其放入列表中,转换为正确的数据类型(int)或运算符,连接并计算。我试图避免使用eval()和ast。literal_eval()抛出了一个“格式错误的字符串错误”。我目前正处于需要将运算符从字符串转换为运算符的位置 以下是我迄今为止所做的工作: equation = ("1+2^4*4*(4+4*9)-10") listint1 = 0 listint2 = 1 finallist = [] for

我正在尝试评估这个字符串。“1+2^4*4*(4+4*9)-10”

我的策略是获取每个元素,将其放入列表中,转换为正确的数据类型(int)或运算符,连接并计算。我试图避免使用eval()和ast。literal_eval()抛出了一个“格式错误的字符串错误”。我目前正处于需要将运算符从字符串转换为运算符的位置

以下是我迄今为止所做的工作:

equation = ("1+2^4*4*(4+4*9)-10")

listint1 = 0
listint2 = 1
finallist = []
for elements in equation:
    finallist.append(equation[listint1:listint2])
    listint1 = listint1 + 1
    listint2 = listint2 + 1

finalfinallist = []
for element in finallist:
    if element.isdigit() == True:
        finalfinallist.append(int(element))
    else:
        finalfinallist.append(element)

for element in finalfinallist:
    if element == str:
        if element == "+":
            element = +
        elif element == "^":
            element = ^
        elif element == "*":
            element = *
        elif element == "("
            element = (
        elif element == ")":
            element = )
        elif element == "-"
            element = -


print finalfinallist

想法?

您试图构建的是一个解析器。你可以看看。解析器用于实现上下文无关语法,请参见

我假设
2^4
的意思是求幂,而不是按位异或(根据python操作符)


试图解析
2^4*4
时可能会出现歧义,可能是(2^4)*4=16*4=64,或者
2^(4*4)=2^16=65536
。我不知道
ast
,但是试着看一下“关联性规则”。

对于这类事情,您可能需要从构建表达式树开始

这将使运算符的处理变得更容易,这样您就知道何时需要运算符,并且可以进行字符串比较以确定在表达式树中的操作数上使用哪个运算符

请记住,我从来没有在Python中这样做过,只有在C中。因此,如果有一种更像Python的方法来做这件事,我目前还不知道,我很想听到它。

这有帮助吗?