如何将str('+')转换为数学运算? 例如:
a = [0,1,2] # or a = ['0','1','2']
b = ['+','-','*']
c = int(a[0]+b[0]+a[1])
换句话说,如果没有str('-1*2')
,如何将int()
转换为for i in c: if i == '+': ...
感谢。
答案 0 :(得分:4)
您也可以使用操作员模块:
import operator as op
#Create a mapping between the string and the operator:
ops = {'+': op.add, '-': op.sub, '*': op.mul}
a = [0,1,2]
b = ['+','-','*']
#use the mapping
c = ops[b[0]](a[0], a[1])
答案 1 :(得分:2)
我很瘦你正在寻找eval(),但我建议用别的东西...... 但是,
>>> eval('-1*2')
-2
eval'执行'传递给它的字符串,就像代码一样。所以这对安全性来说非常危险,特别是如果参数是用户输入......
在这种情况下我建议使用解析库,例如ply http://www.dabeaz.com/ply/ 对于这样的事情来说,使用起来非常简单并且非常有效:)
答案 2 :(得分:2)
如果你的数学表达式适合Python语法,但你是eval(你应该),你可以查看python的ast
模块(docs)。它会将表达式解析为可以迭代的抽象语法树。如果遇到表达式语法之外的任何内容,您可以评估Python的有限子集并抛出错误。
答案 3 :(得分:1)
像其他人一样使用eval,但先过滤它。
>>> s = '1 + 12 / 2 - 12*31'
>>> allowed = set(' 1234567890()+-/*\\')
>>> if allowed.issuperset(s):
... eval(s)
...
-365
答案 4 :(得分:1)
答案 5 :(得分:0)
使用eval:
> eval(str('-1*2'))
> -2
答案 6 :(得分:0)
Dett,
整个字符串的简单eval ...但是要注意,如果用户输入字符串,eval是有风险的,除非你先做一些解析
x = '-1*2'
y = eval(x)
y将是整数值。