python有什么方法可以輸入用戶的條件嗎?例如:
import numpy as np
m = np.array([0,1,2,3,4,5])
condition = input() # for example 'm > 50'
print( m [condition])
我想要m[m>5]的結果,但我想從用戶那里輸入這個條件。有什么辦法嗎?
uj5u.com熱心網友回復:
是的,有辦法。您可以使用內置eval()函式執行此操作,但前提是您可以信任輸入源。如果您不能,用戶可以提供可能破壞您的系統的有害輸入。eval已知具有潛在的非常危險性。eval獲取它的字串引數,決議它并將其作為 Python 運算式求值。這可以是任意 Python 運算式。一個問題是 Python 允許用戶訪問和洗掉系統檔案(例如通過os模塊)。因此,不良行為者可能會提供您輸入 eval 的危險資料,這可能會破壞您的系統。這就是為什么在將輸入源提供給 eval 之前,您需要格外小心以確保您可以信任輸入源。
例如,如果您知道條件總是類似于m ? xwhere ?is one of <, <=, >=, ==, >,那么下面是一種更安全的方法。您可以先讓用戶輸入其中一個選項,然后檢查以確保用戶輸入了其中一個。然后就可以讓用戶輸入號碼了x。然后,您可以使用eval來評估連接的字串。例如,
import numpy as np
m = np.array([0,1,2,3,4,5])
select = {'<', '<=', '>', '>=', '=='}
sym = input("Enter one of <, <=, >, >=, ==: ")
if sym not in select:
print("Invalid input")
exit()
num = float(input("Enter number: "))
condition = eval('m ' sym repr(num))
print(m[condition])
示例會話
Enter one of <, <=, >, >=, ==: >
Enter number: 3
[4 5]
示例會話
Enter one of <, <=, >, >=, ==: harmful_code
Invalid input
uj5u.com熱心網友回復:
你可以做類似的事情eval,我認為:
x = 5
condition = input('condition: ')
if eval(condition):
print('yes')
而不是在輸入中寫入類似x==5或x>2等等,它應該可以作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/461723.html
