我正在寻找一些东西,将一个数学表达式字符串作为输入,并通过添加括号来改变它。
例如:
输入1:"2*4^7"
输出1:"(2*(4^7))"
输入2:"sin(x)*3-8^9"
输出2:"((sin(x)*3)-(8^9))"
输入3:"(2-8)/6"
输出3:"((2-8)/6)"
我目前正在尝试对它进行编码,但是它花费了太多的时间,我更愿意专注于其他事情,所以如果你们知道一些模块可以这样做的话,那就太好了。
我在用python 3
谢谢!
发布于 2016-09-30 23:36:56
使用ast模块,您可以解析您的字符串,然后遍历它来构建所需的字符串表示:
import ast
def represent(tree):
t = type(tree)
if t == ast.Module:
return represent(tree.body)
elif t == list:
# arithmetic expression should only be one thing
return ", ".join(represent(part) for part in tree)
elif t == ast.Expr:
return represent(tree.value)
elif t == ast.BinOp:
o = type(tree.op)
if o == ast.BitXor:
op = "^"
elif o == ast.Mult:
op = "*"
elif o == ast.Add:
op = "+"
...
return "({}{}{})".format(
represent(tree.left),
op,
represent(tree.right),
)
elif t == ast.Num:
return str(tree.n)
elif t == ast.Name:
return tree.id
elif t == ast.Call:
return "{}({})".format(
represent(tree.func),
represent(tree.args),
)
...
# prints (((sin(x)*2)*x)+4)
print(represent(ast.parse("sin(x)*2*x+4")))正如@user2357112在注释中所指出的,只有当您限制自己使用Python的表达式语法,最重要的是使用**而不是^进行幂运算时,这才能起作用。
发布于 2022-06-22 07:00:58
只需使用eval(expression)
用b=a.replace('^','**')等eval(b)替换eval(b)中的字符
可以使用一些变量
例:
x= 3
eval("3 * x **2")https://stackoverflow.com/questions/39801324
复制相似问题