python - 如何检查方程中运算符的顺序是否正确?

标签 python

我正在尝试创建一个将方程式作为输入并根据操作对其进行评估的函数,规则是我应该让运算符 (*,+,-,%,^) 正确的数学表达式,例子:

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/

相关文章:

jquery - Django 应用程序 - Ajax 在 2 个字符和 1 秒延迟后自动完成

Python pandas 按多个索引范围切片数据框

python - Opencv错误初始化完成

python - 如何将选项卡连接到垂直滚动条?

python - 将字符串转换为元组

python - gmplot API 问题

python - 使用 Flask 从静态之外的目录提供文件

python - 从 tar 中仅提取一个目录(在 python 中)

python - 抓取 spotify 网页界面

python - 在 Python 中处理日期/时间的最简单方法是什么?