def evaluar_expresion(expresion):
# Función para evaluar una expresión matemática
# que contiene paréntesis, suma, resta y multiplicación.
# Función para calcular el resultado de una operación binaria
def operar(operador, operandos):
if operador == '+':
return operandos[0] + operandos[1]
elif operador == '-':
return operandos[0] - operandos[1]
elif operador == '&':
return operandos[0] & operandos[1]
# Función auxiliar para encontrar el índice de un paréntesis de cierre
def encontrar_paréntesis_cierre(exp):
stack = []
for i, char in enumerate(exp):
if char == '(':
stack.append(i)
elif char == ')' and stack:
stack.pop()
if not stack:
return i
return -1
# Función principal de evaluación recursiva
def evaluar_recursivo(exp):
# Buscar paréntesis de cierre más externo
idx_cierre = encontrar_paréntesis_cierre(exp)
# Si no hay paréntesis, evaluar la expresión directamente
if idx_cierre == -1:
partes = exp.split()
if len(partes) == 1:
return int(exp)
else:
operador = partes[1]
operandos = [int(partes[0]), int(partes[2])]
return operar(operador, operandos)
# Si hay paréntesis, evaluar la expresión interna de manera recursiva
else:
parte_anterior = exp[:idx_cierre]
parte_posterior = exp[idx_cierre + 1:]
resultado_interno = evaluar_recursivo(exp[1:idx_cierre])
# Unir las partes y continuar evaluando recursivamente
nueva_expresion = f"{parte_anterior} {resultado_interno} {parte_posterior}"
return evaluar_recursivo(nueva_expresion)
# Llamar a la función principal con la expresión completa
return evaluar_recursivo(expresion)
# Ejemplo de uso
expresion = "(3 + 5) & 7"
resultado = evaluar_expresion(expresion)
print(f"Resultado de la expresión '{expresion}': {resultado}")