我正在尝试创建一个将方程式作为输入并根据操作对其进行评估的函数,规则是我应该让运算符 (*,+,-,%,^) 在 正确的数学表达式,例子:
Input: 6**8
Result: Not correct
原因: * 旁边有另一个 * 而不是数字或数学表达式
Input: -6+2
Result: Not correct
原因:“-”在开头,没有落在两个数字之间。
Input: 6*(2+3)
Result: Correct
原因:“*”在数学上正确的表达式“(2+3)”旁边
最佳答案
1。选项:评估
eval
带有 try-except 的表达式:
try:
result = eval(expression)
correct_sign = True
except SyntaxError:
correct_sign = False
优点:
- 非常简单快捷
缺点:
- Python 接受您可能不想要的表达式(例如 ** 在 python 中有效)
- eval 不安全
2。选项:算法
在编译器中使用算法,使数学表达式对 pc 可读。这些算法也可用于评估表达式是否有效。 我的目的不是解释这些算法。外面有足够的资源。
这是您可以执行的操作的一个非常简短的结构:
- 解析一个中缀表达式
- 将中缀表达式转换为后缀表达式
- 评估后缀表达式
您需要了解后缀和中缀表达式的含义。
资源:
调车场算法:https://en.wikipedia.org/wiki/Shunting-yard_algorithm
反向抛光符号/修复后符号:https://en.wikipedia.org/wiki/Reverse_Polish_notation
Python 内置分词器:https://docs.python.org/3.7/library/tokenize.html
优点:
- 可靠
- 适用于复杂的表达式
- 您不必重新发明轮子
缺点
- 复杂化理解
- 实现起来很复杂
关于python - 如何检查方程中运算符的顺序是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55269186/