Python-计算器程序和字符串
我是Python新手,正在尝试编写一个计算器程序。我一直在尝试做以下工作,但没有成功,因此请为我指出正确的方向: 我想作为用户输入一个等式,例如: f(t)=2x^5+8 程序应该识别字符串的不同部分,在这种情况下,生成一个变量f(t)并为其赋值2x^5+8 例如,如果我输入一个等式,后跟一个等号 2x^5+8= 程序将只输出答案 我不是问如何编写求解方程的数学逻辑代码,而是问如何让程序识别字符串的不同部分并据此做出决定 很抱歉,我没有任何代码显示作为一种尝试,因为我不知道如何去做这件事,我正在寻找一些帮助开始Python-计算器程序和字符串,python,string,math,Python,String,Math,我是Python新手,正在尝试编写一个计算器程序。我一直在尝试做以下工作,但没有成功,因此请为我指出正确的方向: 我想作为用户输入一个等式,例如: f(t)=2x^5+8 程序应该识别字符串的不同部分,在这种情况下,生成一个变量f(t)并为其赋值2x^5+8 例如,如果我输入一个等式,后跟一个等号 2x^5+8= 程序将只输出答案 我不是问如何编写求解方程的数学逻辑代码,而是问如何让程序识别字符串的不同部分并据此做出决定 很抱歉,我没有任何代码显示作为一种尝试,因为我不知道如何去做这件事,我正在
谢谢。了解一下上下文:您所描述的问题更一般地被称为,它可能会变得相当复杂,具体取决于环境。语法是对语言的描述;在您的例子中,语言是计算器所有有效公式的集合 建议的第一步,甚至在开始编码之前,就是将语法形式化。这主要是为了您自己的利益,因为这将使编程更容易。实现这一点的一种行之有效的方法是使用描述语法,并且存在类似Python的工具,您可以使用这些工具为此类语言生成解析器 让我们尝试一下简化版的计算器语法:
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
(这是一个有效的定义
)这样的输入李>
前两个可能是语法本身的问题,而最后一个可能需要在以后的阶段处理(可能是语言吗?)
但无论如何,给定这样一种语法,像这样的工具可以为您生成解析器,但让您来处理任何附加逻辑(如
x=x
)。然而,首先,我建议您尝试自己实现它。一个想法是使用递归编写一个所谓的函数。此帮助:?如果可以的话,试着发表一篇尝试编码的文章。你说的“生成变量f(t)”是什么意思?这是否意味着您希望以后能够编写f(t)
,并返回该等式?或者写f(2)
,然后用2
代替t
?(当然,首先等式中没有t
)或者什么?另外,对于2x^5+8=
“答案”应该是什么?这不是一个等式。你想让它在右边假设0
,然后解决这个问题吗?或者别的什么?无论如何,答案是你需要写一个解析器。如果您的语法实际上是Python的完美子集,那么可以使用Python的解析器,方法是调用ast.parse
,然后遍历生成的ast。否则,您可能希望使用类似于pyparsing
(其中有一些很好的示例)的解析器库,或者编写语法并将其提供给解析器生成器工具。@abarnert,让代码为f(2)求解是以后的计划。现在我希望能够写出f(t),然后再把方程拿回来。谢谢,我将做一些关于编写解析器和语法的研究。非常感谢。