Python - 计算器程序和字符串

时间:2014-09-04 02:14:46

标签: python string math

我是Python的新手,正在尝试编写计算器程序。我一直试图做以下但没有成功,所以请指出我正确的方向:

我想以用户身份输入等式,例如: f(t)= 2x ^ 5 + 8

程序应该识别字符串的不同部分,在这种情况下创建一个变量f(t)并为其指定2x ^ 5 + 8。

但是,如果我输入一个等式,后面跟一个等号,例如 2x ^ 5 + 8 =

程序将只输出答案。

我不是问如何编写解决方程​​的数学逻辑,只是如何让程序识别字符串的不同部分并做出相应的决策。

对不起,我没有任何代码可以显示为尝试,因为我不确定如何解决此问题,并且正在寻找一些帮助以便开始。

谢谢。

1 个答案:

答案 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 "="

请注意,此语法存在多个问题。例如:

  1. 空白怎么样?
  2. 负数怎么样?
  3. 您对x = x等输入做了什么(这是有效的definition)?
  4. 前两个可能是语法本身的问题,而最后一个可能需要在稍后阶段处理(语言可能是context sensitive?)。

    但是无论如何,给定这样的语法,像PLY这样的工具可以为你生成一个解析器,但是由你来处理任何额外的逻辑(比如x = x)。首先,我建议你尝试自己实现它。一个想法是使用递归编写所谓的Top Down Parser