2016-12-14 22 views
0

我想讓用戶輸入一個我可以在Python中使用的公式。我如何修改允許我這樣做的raw_input公式?如何讓用戶輸入我可以在python中使用的公式?

目前,我有這個在我的代碼:

consts = list() 
nconst = int(input("How many constraints would you like to add? ")) 
for i in range(nconst): 
    const = input("Constraint " + str(i+1) + ": ") 
    consts.append(const) 

我的約束,我想用戶輸入的公式。我希望公式的格式爲< =。

我嘗試過使用解析器,所以我嘗試了一個使用解析器的測試案例,並最終得到了這段代碼。

import parser 
formula = "x^2" 
code = parser.expr(formula).compile() 

from math import sin 
x = 10 
print(eval(code)) 

然而,當我跑的代碼,Python的給我的8回答時的答案應該是100是否有問題還與我所使用的解析器代碼?

任何幫助將不勝感激!

+1

您的等式導致8,因爲在Python中'^'意味着'bitwise xor'。你應該使用'**' – Lafexlos

+0

'parser'是Python的內部解析器。你必須編寫*自己的*解析器來解析方程,或者使用已經寫好的人。 –

+0

結帳這個問題,這將有助於你創建自己的解析器http://stackoverflow.com/questions/2371436/evaluating-a-mathematical-expression-in-a-string –

回答

0

您需要解析輸入字符串並構建公式。例如,假設我們想把2加4,那麼你可以輸入2 ** 4或2^4。在這兩種情況下,根據您的方程符號,您需要解析字符串輸入並評估方程。

如果你可以提供測試用例,那麼我可以幫助解析字符串。

編輯:Python使用**爲冪,但如果你希望用戶使用^作爲輸入,那麼你可以嘗試以下操作:

# say s is input 
[base, exponent] = s.split('^') 
print (float(base)**float(exponent)) 

這應該工作。這樣你就必須建立你想要輸入的所有公式。複雜的公式將需要更強大的解析器。這只是開始於

+0

嗨Shiv!我剛剛添加了我試過的解析器代碼! –

相關問題