识别等式中的变量

时间:2013-08-28 14:01:32

标签: python formula equations

我正在尝试创建一个计算器,它将接收公式和相应变量的数据作为输入。

我试图让这个用户最友好,所以在我看来,用户会插入公式,我的代码只会识别公式中的变量。

在此之后,程序只会询问与每个变量对应的值。

问题是:“我如何解析字符串以搜索变量?” 我必须能够识别“pi”和三角函数之类的东西,因为变量可能是角度。

有没有简单的方法可以做到这一点?

编辑:这是我到目前为止的代码,它只是我用户执行代码的第一个方法。但我试图逃避使用eval和exec

from scipy import stats
import matplotlib.pyplot as plt
import numpy as np
from math import*
import math
recept = "."

print("Bem vindo a calculadora de incertezas com base no metodo Monte Carlo")
formula = input("Insira a formula desejada:")
while (recept != ""):
    recept = input("Defina as variaveis de acordo com o exemplo:\n EX: P = (media,     desviopadrão)")
    print (recept)

    #Aproach one: Execute code inserted by user: user would define the variables.
    if(recept != ""):
        exec(recept)

print (exec(formula))

2 个答案:

答案 0 :(得分:1)

您可以尝试RP,它会根据您在EBNF格式中定义的规则为您提供简单的解析器。

答案 1 :(得分:1)

这应该让你开始:

>>> import re

>>> formula = "P = V*I*cos(2*pi*f)"
>>> variables = re.findall('[a-zA-Z]+' , formula)
['P', 'V', 'I', 'cos', 'pi', 'f']
>>> special = ['cos', 'pi']
>>> variables = [v for v in variables if v not in special]  
['P', 'V', 'I', 'f']

从这里你可以改进正则表达式来解释更复杂的变量名称(例如: V1