#https://gist.github.com/ohaz/ed0b14a487b0569aad2d  
import ast  
  
def recurse(node):  
    if isinstance(node, ast.BinOp):  
        if isinstance(node.op, ast.Mult) or isinstance(node.op, ast.Div):  
            print('(', end='')  
        recurse(node.left)  
        recurse(node.op)  
        recurse(node.right)  
        if isinstance(node.op, ast.Mult) or isinstance(node.op, ast.Div):  
            print(')', end='')  
    elif isinstance(node, ast.Add):  
        print('+', end='')  
    elif isinstance(node, ast.Sub):  
        print('-', end='')  
    elif isinstance(node, ast.Mult):  
        print('*', end='')  
    elif isinstance(node, ast.Div):  
        print('/', end='')  
    elif isinstance(node, ast.Num):  
        print(node.n, end='')  
    else:  
        for child in ast.iter_child_nodes(node):  
            recurse(child)  
  
  
def search_expr(node):  
    returns = []  
    for child in ast.iter_child_nodes(node):  
        if isinstance(child, ast.Expr):  
            return child  
        returns.append(search_expr(child))  
    for ret in returns:  
        if isinstance(ret, ast.Expr):  
            return ret  
    return None  
  
  
formula = '4+5*7/2'  
  
a = ast.parse(formula)  
  
expr = search_expr(a)  
if expr is not None:  
    recurse(expr)  
print()  