Python - 计算器程序和字符串

问题描述:

我是新来的Python,我正在努力编写一个计算器程序。我一直在尝试做以下事情,但没有成功,所以请指点我正确的方向:Python - 计算器程序和字符串

我想输入一个方程作为用户,例如: f(t)= 2x^5 + 8

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

不过,如果我输入的方程式随后等号,例如 2X^5 + 8 =

程序将不是只输出答案。

我不是问如何编写求解方程的数学逻辑,只是如何让程序识别字符串的不同部分并据此作出决定。

对不起,我没有任何代码显示为一个尝试,因为我不知道如何去做这件事,我正在寻找一些帮助开始。

谢谢。

+0

This help:http://*.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python?如果可以的话,尝试发布编码尝试。 – MikeiLL 2014-09-04 02:17:40

+1

“做一个变量f(t)”是什么意思?这是否意味着你想稍后能够写'f(t)'并且回到那个等式?或者写'f(2)'并用'2'代替't'得到那个等式? (当然,等式中没有“t”......)或者是什么?另外,“2x^5 + 8 ='应该是”答案“是什么?这不是一个等式。你想让它在右边假设'0'并解决这个问题吗?或者有些不同? – abarnert 2014-09-04 02:26:55

+1

无论如何,答案是你需要编写一个解析器。如果你的语法实际上是Python的一个完美的子集,你可以使用Python的解析器,通过调用'ast.parse'然后执行生成的AST。否则,您可能希望使用像'pyparsing'这样的解析器库(它有一些很好的例子),或者编写一个语法并将其提供给解析器生成器工具。 – abarnert 2014-09-04 02:28:24

对于一些情况:您所描述的问题通常被称为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)?

前两个可能是语法本身的问题,而最后一个可能需要在稍后阶段处理(语言可能是context sensitive?)。

但无论如何,考虑到这样的语法,像PLY这样的工具可以为您生成一个解析器,但让您自己去处理任何其他逻辑(如x = x)。然而,首先,我建议你尝试自己实现它。一个想法是使用递归编写一个所谓的Top Down Parser