2011-12-12 91 views
1

我正在寫涉及計算的最大用戶定義的函數的程序,但是如果用戶在例如x變量的術語進入的函數,即用戶輸入的功能

input = x**2 + 2*x + 1 

I(相當期待)由於未定義x而出現錯誤。

有誰知道一個有效的方法來允許用戶輸入一個函數的單一變量,如x?

+0

請看這裏:http://stackoverflow.com/questions/594266/equation-parsing-in-python – KCH

+0

int(raw_input(「請輸入x」))http://docs.python.org/library/functions .html#raw_input – bpgergo

回答

2

如果您不擔心安全性,最簡單的解決方案是eval表達式,例如

def calculate(value, function): 
    x = value 
    return eval(function) 

print calculate(2, "x**2 + 2*x + 1") 
print calculate(2, "x**3 - x**2 + 1") 

輸出:

9 
5 

你可以使它更安全通過傳遞一個空builtin字典,但仍我覺得有些聰明的代碼將能夠訪問你的代碼的內部。

+0

然後,如果您使用@bpgergo建議的'int(raw_input(...))'策略,那麼用戶可以輸入一個值。 – Jon

+1

@Jon yes可以有多種方式從用戶獲得'x'值和'函數'字符串,從gui或命令行或API –

+0

我唯一可以補充的,也許會更好地使用http://docs.python.org/library/ast.html?highlight=eval#ast.literal_eval –