所以我有一个变量是function ='(2 * 1)+ 3'我怎样才能从字符串中获取它并确定答案呢?我尝试使用float()int(float()),但我不确定这是否只是数字。
答案 0 :(得分:4)
您可以使用>>> function = '(2*1)+3'
>>> eval(function)
5
grouping sets
正如@mgilson所说,
只有完全信任字符串的来源才能执行此操作。
答案 1 :(得分:4)
我写了几次,而且每次看起来我都丢失了代码......
可以使用ast
:
import ast
import operator
_OP_MAP = {
ast.Add: operator.add,
ast.Sub: operator.sub,
ast.Mult: operator.mul,
ast.Div: operator.div,
ast.Invert: operator.neg,
}
class Calc(ast.NodeVisitor):
def visit_BinOp(self, node):
left = self.visit(node.left)
right = self.visit(node.right)
return _OP_MAP[type(node.op)](left, right)
def visit_Num(self, node):
return node.n
def visit_Expr(self, node):
return self.visit(node.value)
@classmethod
def evaluate(cls, expression):
tree = ast.parse(expression)
calc = cls()
return calc.visit(tree.body[0])
print Calc.evaluate('1 + 3 * (2 + 7)')
此计算器支持数字,加法,减法,除法,乘法和否定(例如-6
)和带括号的组。操作顺序与Python相同,应该是相对直观的...它可以(几乎可以)通过添加ast
节点类型和相应的运算符/来扩展以支持python支持的任何一元或二元运算符功能到上面的_OP_MAP
。