gpt4 book ai didi

python - 将字符串表达式转换为数学表达式?

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:47 24 4
gpt4 key购买 nike

我正在寻找将数学表达式字符串作为输入并通过向其添加括号来更改它的东西。

例如:

输入 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

谢谢!

最佳答案

使用 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 的表达式语法时才有效,最重要的是使用 ** 而不是 ^ 进行求幂.

关于python - 将字符串表达式转换为数学表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39801324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com