Python 将字符串展开为代数表达式
我有一组简单的字符串,表示一些DSL:Python 将字符串展开为代数表达式,python,string,Python,String,我有一组简单的字符串,表示一些DSL: my_str = ['("word 1" + "word 2") * "word 3"', '("word 1" + "word 2") * ("word 3" + "word 4")', '(("word 1" + "word 2") * ("word 3" + "word 4")) * "word 5"', ] 我试图(但失败得很严重)将这些更改为更直截了当的形式,例如 a = foo(my_
my_str = ['("word 1" + "word 2") * "word 3"',
'("word 1" + "word 2") * ("word 3" + "word 4")',
'(("word 1" + "word 2") * ("word 3" + "word 4")) * "word 5"',
]
我试图(但失败得很严重)将这些更改为更直截了当的形式,例如
a = foo(my_str)
a= [
'("word 1" * "word 3") + ("word 2" * "word 3")',
'("word 1" * "word 3") + ("word 1" * "word 4") + ("word 2" * "word 3") + ("word 2" * "word 4")',
'("word 1" * "word 3" * "word 5") + ("word 1" * "word 4" * "word 5") + ("word 2" * "word 3" * "word 5") + ("word 2" * "word 4" * "word 5")',
]
这可能很简单,但我似乎无法理解逻辑。好的,最后我使用了sympy和pyparsing的组合。 我使用pyparsing来理解变量之间的关系和层次结构,然后使用sympy来创建和扩展表达式 如果有人对一些过度编写的代码感兴趣,可以在此处查看。这并不简单。我曾经阅读过Lisp教科书,其中有多章专门介绍如何构建一个简单的符号代数操纵器,而Lisp中的任务比Python中的要简单得多。所以,首先,不要惊慌,不是你做不到,只是你吃了比你意识到的更大的一口。第二,去友好的当地公共图书馆,买一本Lisp教科书,用Lisp完成这些章节,然后用Python回到任务中来。听起来像是一份工作。