我正在尝试创建一个计算器,它将接收公式和相应变量的数据作为输入。
我试图让这个用户最友好,所以在我看来,用户会插入公式,我的代码只会识别公式中的变量。
在此之后,程序只会询问与每个变量对应的值。
问题是:“我如何解析字符串以搜索变量?” 我必须能够识别“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))
答案 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 )