python simbolos Evaluación de expresión matemática




simbolos en python (5)

¿Cuál es la mejor manera de implementar un programa python que tomará una cadena y generará su resultado de acuerdo con la precedencia del operador (por ejemplo: "4 + 3 * 5" dará salida a 19). Busqué en Google formas de resolver este problema, pero todas eran demasiado complejas y busco una (relativamente) simple.

aclaración: Necesito algo un poco más avanzado que eval () - Quiero poder agregar otros operadores (por ejemplo, un operador máximo - 4 $ 2 = 4) o, también estoy más interesado académicamente que profesionalmente - quiero saber cómo hacer esto


No estoy muy familiarizado con Python y cualquier método extremadamente Pythonic, pero podrías mirar el patrón de Intérprete , que está definido en el libro de Gang of Four. Está diseñado para procesar un "idioma", y las expresiones matemáticas siguen un lenguaje particular con reglas. De hecho, el ejemplo en Wikipedia es en realidad una implementación de Java de una calculadora RPN.




Otra posibilidad es mirar Pyparsing , que es un creador de analizador general. Es más poderoso de lo que necesita, pero puede ser más rápido de implementar.


Si está "interesado académicamente", quiere aprender cómo escribir un analizador con precedencia de operador.

El análisis simple de arriba hacia abajo en Python es un buen artículo que construye un analizador de ejemplos para hacer exactamente lo que usted desea hacer: Evaluar expresiones matemáticas.

Recomiendo probar tu primer analizador, es uno de esos momentos "ah, así es como funciona".





math