Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-计算器程序和字符串_Python_String_Math - Fatal编程技术网

Python-计算器程序和字符串

Python-计算器程序和字符串,python,string,math,Python,String,Math,我是Python新手,正在尝试编写一个计算器程序。我一直在尝试做以下工作,但没有成功,因此请为我指出正确的方向: 我想作为用户输入一个等式,例如: f(t)=2x^5+8 程序应该识别字符串的不同部分,在这种情况下,生成一个变量f(t)并为其赋值2x^5+8 例如,如果我输入一个等式,后跟一个等号 2x^5+8= 程序将只输出答案 我不是问如何编写求解方程的数学逻辑代码,而是问如何让程序识别字符串的不同部分并据此做出决定 很抱歉,我没有任何代码显示作为一种尝试,因为我不知道如何去做这件事,我正在

我是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),然后再把方程拿回来。谢谢,我将做一些关于编写解析器和语法的研究。非常感谢。