我今天開始撰寫我的第一個 Python 代碼,并讓我的程式正常作業,直到我嘗試接受用戶輸入。一個簡單的例子:
import numpy
A = set()
max = 10**3;
def f(k):
return 2*k 1
g = (f(k) for k in range(max));
A.update(g);
print("A = ", A)
它只是填充一個集合。它作業正常(除了非常慢),直到我嘗試讓輸入資料定義函式:
func = input("Input a function: ")
def f(k):
return func
g = (f(k) for k in range(max));
A.update(g);
print("A = ", A)
A = {'2*k 1'}如果我給它 2*k 1 作為輸入,這將回傳。
如何使用用戶輸入讓它像我的原始代碼一樣作業?我在這里和其他地方找到了一些關于類似問題的例子,但在那些涉及觸發函式的情況下,我必須保持浮動遠離此代碼 =)
我在 PyCharm 2021.2.2(社區版)中使用 Python 3.9,以防該資訊相關。
uj5u.com熱心網友回復:
input()總是回傳一個字串。因此,該f(k)函式始終回傳輸入的字串,而不是該字串中代碼的結果。你應該用eval(func)in 來f(k)代替。
注意:的使用eval會導致輸入中的任何惡意代碼被執行。因此,僅當您可以完全控制輸入并且沒有其他方法可以做到時才使用它。
我還建議使用range(1,max 1),這樣您就可以得到 1 到 max instaed 0 到 max -1 的答案。(范圍從不包括結束值)
在給出的代碼中,沒有使用 numpy 模塊。如果您的進一步代碼沒有使用它,您可以洗掉匯入。
uj5u.com熱心網友回復:
您可以使用 python lambda 函式將函式的定義作為輸入傳遞。運行下面的代碼,并f = lambda x: 2*x 1作為輸入傳遞,你會看到結果 5 被列印出來。
func = input("Input a function: ")
exec(func)
print(f(2))
您還可以通過從輸入字串中決議并使用globals運行它來獲取函式名稱。
func = input("Input a function: ")
exec(func)
function_name = func.split('=')[0].strip()
func_to_run = globals()[function_name]
print(func_to_run(2))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346135.html
上一篇:我收到此代碼的“ReferenceError:invalidassignmentleft-handside”錯誤。我看不出有什么問題
