说我有一个包含数学运算符的列表,比如这个
operators = ['+','-','*','/']
我从这里拿一个随机算子,就像这个
op = random.choice(operators)
如果我拿两个数字,比如说4和2,我怎样才能让Python用数字操作数字运算(名为'op')?
答案 0 :(得分:7)
您最好不将运算符指定为文本。只需使用 lambda表达式或operator
模块:
import operator
import random
operators = [operator.add,operator.sub,operator.mul,operator.floordiv]
op = random.choice(operators)
然后,您可以通过两个参数调用op
来调用它,例如:
result = op(2,3)
例如:
>>> import operator
>>> import random
>>>
>>> operators = [operator.add,operator.sub,operator.mul,operator.floordiv]
>>> op = random.choice(operators)
>>> op
<built-in function sub>
>>> op(4,2)
2
正如您所看到的,random
选择了sub
运算符,因此它从2
中减去了4
。
如果您想要定义operator
等不支持的函数,您可以使用lambda表达式,如:
operators = [operator.add,lambda x,y:x+2*y]
所以在这里你指定了一个带参数x
和y
并计算x+2*y
的函数(当然你可以自己定义一个任意表达式)。
答案 1 :(得分:4)
如果您完全确定传递给它的内容是安全的,您可以使用eval
:
num1 = 4
num2 = 2
operators = ['+','-','*','/']
op = random.choice(operators)
res = eval(str(num1) + op + str(num2))
请记住eval
执行代码而不对其进行任何检查,所以要小心。使用ast
进行安全评估时,请参阅this以了解有关该主题的更多详细信息。