我是Python的新手,正在尝试编写计算器程序。我一直试图做以下但没有成功,所以请指出我正确的方向:
我想以用户身份输入等式,例如: f(t)= 2x ^ 5 + 8
程序应该识别字符串的不同部分,在这种情况下创建一个变量f(t)并为其指定2x ^ 5 + 8。
但是,如果我输入一个等式,后面跟一个等号,例如 2x ^ 5 + 8 =
程序将只输出答案。
我不是问如何编写解决方程的数学逻辑,只是如何让程序识别字符串的不同部分并做出相应的决策。
对不起,我没有任何代码可以显示为尝试,因为我不确定如何解决此问题,并且正在寻找一些帮助以便开始。
谢谢。
答案 0 :(得分:0)
对于一些上下文:您所描述的问题通常称为parsing,它可能会变得相当复杂,具体取决于grammar。 语法是语言的描述;在您的情况下,语言是计算器的所有有效公式的集合。
即使在开始编码之前,第一个建议的步骤是将语法形式化。这主要是为了您自己的利益,因为它将使编程更容易。一种完善的方法是使用EBNF来描述语法,并且存在用于Python的PLY工具,您可以使用这些工具为这些语言生成解析器。
让我们试试你的计算器语法的简化版本:
digit := "0" | "1" # our numbers are in binary
number := digit | number digit # these numbers are all nonnegative
variable := "x" | "y" # we recognize two variable names
operator := "+" | "-" # we could have more operators
expression := number | variable | "(" expression operator expression ")"
definition := variable "=" expression
evaluation := expression "="
请注意,此语法存在多个问题。例如:
x = x
等输入做了什么(这是有效的definition
)? 前两个可能是语法本身的问题,而最后一个可能需要在稍后阶段处理(语言可能是context sensitive?)。
但是无论如何,给定这样的语法,像PLY这样的工具可以为你生成一个解析器,但是由你来处理任何额外的逻辑(比如x = x
)。首先,我建议你尝试自己实现它。一个想法是使用递归编写所谓的Top Down Parser。