Python:使用列表中的运算符的数学运算

时间:2017-03-16 14:19:51

标签: python list math operators

说我有一个包含数学运算符的列表,比如这个

operators = ['+','-','*','/']

我从这里拿一个随机算子,就像这个

op = random.choice(operators)

如果我拿两个数字,比如说4和2,我怎样才能让Python用数字操作数字运算(名为'op')?

2 个答案:

答案 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]

所以在这里你指定了一个带参数xy并计算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以了解有关该主题的更多详细信息。