#! /usr/bin/env python

def parse(eq):
    """Cette fonction parse une chaine et retourne sa valeur"""

    # Check for + and -
    nbparen = 0
    indices = []
    for i in range(len(eq)):
        if (eq[i] == '+' or eq[i] == '-') and nbparen == 0:
            indices.append(i)
        if (eq[i] == '('):
            nbparen = nbparen + 1
        if (eq[i] == ')'):
            nbparen = nbparen - 1
    indices.append(len(eq))

    if (len(indices) != 1):
        somme = parse(eq[0:indices[0]])
        for i in range(len(indices)-1):
            partiel = parse(eq[indices[i]+1:indices[i+1]])
            if eq[indices[i]] == '+':
                somme += partiel
            else:
                somme -= partiel
        return somme


    # Check for * and /
    nbparen = 0
    indices = []
    for i in range(len(eq)):
        if (eq[i] == '*' or eq[i] == '/') and nbparen == 0:
            indices.append(i)
        if (eq[i] == '('):
            nbparen = nbparen + 1
        if (eq[i] == ')'):
            nbparen = nbparen - 1
    indices.append(len(eq))

    if (len(indices) != 1):
        produit = parse(eq[0:indices[0]])
        for i in range(len(indices)-1):
            partiel = parse(eq[indices[i]+1:indices[i+1]])
            if eq[indices[i]] == '*':
                produit *= partiel
            else:
                produit /= partiel
        return produit


    # Take away parenthesis
    if eq[0] == '(' and eq[-1] == ')':
        return parse(eq[1:-1])

    return eval(eq)



print parse('1-(2-3)*4+(3+5)/4')
