擅长:python、mysql、java
<p>我认为最灵活的解决方案(不使用<code>eval</code>并且能够处理任何操作)是将字符串解析成一个二进制(红黑)树,其中叶是数字和分支运算符(+、-、/、*等)。你知道吗</p>
<p>例如,<code>"1+(5*12)/17"</code>将被解析为以下结构:</p>
<pre><code> "+"
/ \
1 "/"
/ \
"()" 17
/
"*"
/ \
5 12
</code></pre>
<p>一旦您将一个字符串解析成这个结构,就可以通过从右到左遍历深度优先的分支来轻松计算。你知道吗</p>
<p>如果需要处理变量,则必须在解析字符串或遍历树时获取<code>locals()</code>并相应地替换。你知道吗</p>
<p>编辑:</p>
<p>我创建了一个工作示例来说明这一点,您可以在github上找到源代码:<a href="https://github.com/MJWunderlich/py-math-expression-evaluator" rel="nofollow">https://github.com/MJWunderlich/py-math-expression-evaluator</a></p>