【发布时间】:2015-09-25 06:36:40
【问题描述】:
我正在制作一个数学程序,允许用户输入一个方程,程序会解决它。我正在努力使其尽可能用户友好。我希望用户能够轻松地输入方程,而不必担心在每个乘法实例之间添加乘法符号。
这是一个例子:
用户输入:y=xy+yz 程序输出:y=x*y+y*z
我已经能够使用 Python 的 re 模块轻松完成此操作,如下所示:
equation = "y=xy+yz"
equation = re.sub(r"([xyzuvet])([xyzuvet])",r"\1*\2", equation) # x,y,z,u,v,e, and t and variables and constants the user can use in their equation.
equation = re.sub(r"([xyzuvet])([xyzuvet])",r"\1*\2", equation) # Must run twice in the event the equation looks something like y=xyzxyz
但是,当我引入一个特殊的函数(例如y=yexp(x))时,我遇到了一个问题。当我运行上面的代码时,我会得到y=y*e*xp(x)的输出。
我后来更新了我的代码来解释 pi:
equation = re.sub(r"([xyzuve]|pi)([xyzuve]|pi)",r"\1*\2", equation)
equation = re.sub(r"([xyzuve]|pi)([xyzuve]|pi)",r"\1*\2", equation)
我在想我可以使用上面类似的方法来匹配exp 并防止它在“e”和“x”之间添加*,如下所示:
equation = re.sub(r"([xyzuve]|pi|exp)([xyzuve]|pi|exp)",r"\1*\2", equation)
equation = re.sub(r"([xyzuve]|pi|exp)([xyzuve]|pi|exp)",r"\1*\2", equation)
我想通过添加exp 以与我添加pi 相同的方式,它会起作用;但不幸的是它不起作用。有没有办法将exp和其他同时包含x、y、z、u、v、t和e的函数作为一个整体来处理?
以下是一些我希望输入看起来像的示例:
输入:y=eexp(xyz) 输出:y=e*exp(x*y*z)
输入:y=pifrexp(yt) 输出:y=pi*frexp(y*t)
输入:y=sin(x)exp(y) 输出:y=sin(x)*exp(y)
【问题讨论】:
-
把
exp和pi放在第一位。 -
我刚刚尝试过,不幸的是出现了同样的问题。
-
因为
re.sub第二次了。
标签: python regex replace insert