我有一个变量,它是 function = '(2*1)+3'。我如何将它从字符串形式中取出并计算答案?我尝试使用 float()、int(float()) 但我不确定这是否仅适用于数字。
请您参考如下方法:
我已经写过几次了,每次我都好像把代码弄丢了......
可以使用 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 相同,应该相对直观......它可以(几乎微不足道)扩展以支持 python 通过添加 ast 节点类型支持的几乎任何一元或二元运算符,并且与上面的 _OP_MAP 对应的运算符/函数。
