Comment

Cam

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))

#That's my little addition :3 - thanks!!