如何在 python 中输入用户的条件或命令?

How to input a condition or a command from user in python?

在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] 的结果,但我想从用户那里输入这个条件。有什么办法吗?

你可以用 eval 做类似的事情,我认为:

x = 5
condition = input('condition: ')
if eval(condition):
    print('yes')

而且在输入中写 x==5x>2 等,它应该可以工作。

是的,有办法。您可以使用 built-in eval() 函数来完成此操作,但 仅当您可以信任输入源 时。如果不能,用户可能会提供有害的输入,从而破坏您的系统。 eval 已知可能非常危险。 eval 获取其字符串参数,对其进行解析并将其计算为 Python 表达式。这可以是任意 Python 表达式。一个问题是 Python 允许用户访问和删除系统文件(例如通过 os 模块)。因此 bad-actor 可能会提供您输入 eval 的危险数据,这可能会破坏您的系统。这就是为什么在将输入源提供给 eval 之前,您需要格外小心以确保您可以信任输入源。

例如,如果您知道条件总是类似于 m ? x,其中 ?<, <=, >=, ==, > 之一,那么下面是一种更安全的方法。您可以先让用户输入其中一个选项,然后检查以确保用户输入了其中一个选项。然后可以让用户输入数字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