Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Operaciones Matematicas
#1
Hola, buenas tardes queria pedir ayuda para solucionar un problema. 
Estoy desarrollando un programa en python3 en el que me conecto a un servidor y este me va mandando operaciones matematicas y tengo que resolver y mandar el resultado con el inconveniente de que no puedo usar la funcion eval()

las funciones que me envian son de este tipo:
((((81 -29)* 98) + 62)* ((78- 55)+ 49))
((33/ 57) 
((61 /69)+89)) -8)

¿Alguna idea de como hacerlo?
un saludo
Responder
#2
Hola. No parece ser una tarea muy sencilla, en este enlace tienes unas cuantas soluciones para analizar y ejecutar operaciones matemáticas en una cadena. Definitivamente eval() no es una opción ya que introduce un riesgo de seguridad bastante importante.

Te extraigo uno de los códigos propuestos en el link anterior que utiliza únicamente la librería estándar.

Código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ast
import operator as op

# supported operators
operators = {ast.Add: op.add, ast.Sub: op.sub, ast.Mult: op.mul,
            ast.Div: op.truediv, ast.Pow: op.pow, ast.BitXor: op.xor,
            ast.USub: op.neg}

def eval_expr(expr):
   """
   >>> eval_expr('2^6')
   4
   >>> eval_expr('2**6')
   64
   >>> eval_expr('1 + 2*3**(4^5) / (6 + -7)')
   -5.0
   """
   return eval_(ast.parse(expr, mode='eval').body)

def eval_(node):
   if isinstance(node, ast.Num): # <number>
       return node.n
   elif isinstance(node, ast.BinOp): # <left> <operator> <right>
       return operators[type(node.op)](eval_(node.left), eval_(node.right))
   elif isinstance(node, ast.UnaryOp): # <operator> <operand> e.g., -1
       return operators[type(node.op)](eval_(node.operand))
   else:
       raise TypeError(node)


print(eval_expr("((((81 -29)* 98) + 62)* ((78- 55)+ 49))"))

Espero que te sirva.

Saludos.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)