Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re, math
- class calculator(object):
- def __init__(self):
- self.error = None
- self.intRegex = re.compile(r'\b[\d\.]+\b')
- def _return(self, value, error=None):
- if error:
- self.error = error
- return value
- def _safeEval(self, expr, symbols={}):
- return eval(expr, dict(__builtins__=None), symbols)
- def _toFloat(self, match):
- group = match.group()
- if group.find('.') == -1:
- return group + '.0'
- return group
- def calc(self, expr, advanced=False):
- self.error = None
- expr = expr.replace('^','**')
- expr = self.intRegex.sub(self._toFloat, expr)
- try:
- if advanced:
- return self._return(self._safeEval(expr, vars(math)))
- else:
- return self._return(self._safeEval(expr))
- except Exception, e:
- return self._return(None, error=e)
- def fancyCalc(self, expr, advanced=False):
- result = self.calc(expr, advanced=advanced)
- if not result:
- return "Error [{1}]: `{0}`".format(self.error, self.error.__class__.__name__)
- else:
- return result
- calc = calculator()
- for equation in ["2+2","test"]:
- print "Result for equation `{0}` is: {1}".format(equation, calc.fancyCalc(equation))
Add Comment
Please, Sign In to add comment