1

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

我试图让它尽可能地对用户友好,所以在我看来,用户会插入公式,我的代码会简单地识别公式中的变量。

在此之后,程序将简单地询问每个变量对应的值。

问题是:“如何解析字符串以搜索变量?” 我必须能够识别诸如“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))
4

2 回答 2

1

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

于 2013-08-28T14:18:12.170 回答
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

于 2013-08-28T14:28:03.127 回答