dynamic.aerospace.inc Asked:2024-10-19 18:47:10 +0000 UTC2024-10-19 18:47:10 +0000 UTC 2024-10-19 18:47:10 +0000 UTC 如何在 Python 中创建公式生成器? 772 在开发下一个项目时,需要将大量公式引入到Python.事实证明,在程序的实现过程中,非常不方便且难以阅读。因此,我决定创建一个构造函数来引入和使用与标准工具包中类似的公式Word,但这样在编写这样一个可视化公式后,程序会将其转换为代码Python。 这项任务非常广泛,我不知道如何处理它,您能否推荐可以帮助编写这样的程序的库、模块、文章或其他材料。 python 1 个回答 Voted Best Answer Ben Puls 2024-10-19T19:50:07Z2024-10-19T19:50:07Z 我建议尝试使用解释器模式来解决这个问题。 首先,您需要创建一个上下文,在其中存储稍后将使用的表达式。使用抽象类创建一个表达式,解释它并返回它。 抽象类Expression: class Expression: def to_code(self) -> str: pass 现在您需要创建一组现成的表达式。例如,我们将考虑基本的,但它们的数量可以增加。 class Number(Expression): def __init__(self, value) -> None: self.value = value def to_code(self) -> str: return str(self.value) class Add(Expression): def __init__(self, *args) -> None: self.args = args def to_code(self) -> str: return f"({" + ".join((str(i.to_code()) for i in self.args))})" class Sin(Expression): def __init__(self, expression) -> None: self.expression = expression def to_code(self) -> str: return f"math.sin({self.expression.to_code()})" class Cos(Expression): def __init__(self, expression) -> None: self.expression = expression def to_code(self) -> str: return f"math.cos({self.expression.to_code()})" class Sqrt(Expression): def __init__(self, expression) -> None: self.expression = expression def to_code(self) -> str: return f"math.sqrt({self.expression.to_code()})" 本质上,您可以创建任何数学函数或常数并将其写下来。就我而言,可以使用标准数学模块计算结果。 接下来,让我们创建一个示例表达式: expression = Add(Sin(Number(0)), Sqrt(Number(16)), Cos(Number(0))) code = expression.to_code() 结果,我们得到以下表达式: (math.sin(0) + math.sqrt(16) + math.cos(0)) 因此,您可以通过导入math模块轻松计算它。我们将表达式放入代码中并得到5.0。 然后,您可以通过在Tkinter等中编写一个类似计算器的小型实现来使用它。
我建议尝试使用解释器模式来解决这个问题。
首先,您需要创建一个上下文,在其中存储稍后将使用的表达式。使用抽象类创建一个表达式,解释它并返回它。
抽象类
Expression:现在您需要创建一组现成的表达式。例如,我们将考虑基本的,但它们的数量可以增加。
本质上,您可以创建任何数学函数或常数并将其写下来。就我而言,可以使用标准数学模块计算结果。
接下来,让我们创建一个示例表达式:
结果,我们得到以下表达式:
因此,您可以通过导入math模块轻松计算它。我们将表达式放入代码中并得到
5.0。然后,您可以通过在Tkinter等中编写一个类似计算器的小型实现来使用它。