我正在制作一个允许用户输入等式的数学程序,程序将解决它。我想尽可能使用户友好。我希望用户能够轻松地键入方程,而不必担心在每个乘法实例之间添加乘法符号。
以下是一个例子:
用户输入:y=xy+yz
程序输出:y=x*y+y*z
我已经能够使用Python的模块轻松完成这项工作,如下所示:
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)
答案 0 :(得分:1)
答案 1 :(得分:1)
答案 2 :(得分:1)
这似乎产生了你想要的东西:
equation = re.sub(r"([)xyzuvet]|pi|exp|frexp)([xyzuvet]|pi|exp|frexp)\b",r"\1*\2", equation)
equation = re.sub(r"([)xyzuvet]|pi|exp|frexp)([xyzuvet]|pi|exp|frexp)\b",r"\1*\2", equation)
例如:
>>> import re
>>> eqns = ('y=eexp(xyz)', 'y=pifrexp(yt)', 'y=sin(x)exp(y)')
>>> for equation in eqns:
... equation = re.sub(r"([)xyzuvet]|pi|exp|frexp)([xyzuvet]|pi|exp|frexp)\b",r"\1*\2", equation)
... equation = re.sub(r"([)xyzuvet]|pi|exp|frexp)([xyzuvet]|pi|exp|frexp)\b",r"\1*\2", equation)
... print equation
...
y=e*exp(x*y*z)
y=pi*frexp(y*t)
y=sin(x)*exp(y)