如何计算字符串中的方程式,python

时间:2015-10-09 02:58:03

标签: python string equation

所以我有一个变量是function ='(2 * 1)+ 3'我怎样才能从字符串中获取它并确定答案呢?我尝试使用float()int(float()),但我不确定这是否只是数字。

2 个答案:

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