2013-08-28 67 views
1

我正在嘗試創建一個計算器,它將接收來自各個變量的公式和數據作爲輸入。識別等式中的變量

我試圖讓這個用戶界面儘可能的友好,所以在我看來,用戶會插入公式,而我的代碼只會在公式中確定變量。

在此之後,程序將簡單地詢問每個變量對應的值。

問題是:「我如何解析字符串來搜索變量?」 我必須能夠識別「pi」和三角函數,因爲變量可能是角度。

有沒有簡單的方法來做到這一點?

編輯:這是我到目前爲止的代碼,這只是我的第一個aproach,它將是用戶執行代碼。但我想使用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

你能後的你一些代碼到目前爲止嘗試過嗎? –

+0

我不認爲我很瞭解你。 你的意思是: 5pi 並且計算器會自動識別pi爲3.14並將其乘以5? –

+0

是的,也許我表達自己錯了。例如:P = V * I * cos(2 * pi * f),起初我只是解析什麼是文本,但並不總是什麼文本是一個變量。在這種情況下,只有V,I和f是變量。 – humberto

回答

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

+0

不錯!所以我只需要創建一個具有所有三角函數的數組。 – humberto

1

你可以嘗試RP,讓你根據規則,一個簡單的解析器,你在EBNF格式定義迴避。