def eval(): expression = request.args.get('expression', '') notation = request.args.get('notation', 'standard') try: retval = { 'expression': expression, 'notation': notation, 'result': evaluate(expression, notation == 'rpn'), 'error': False, 'error_str': '' } except RuntimeError as e: retval = { 'expression': expression, 'notation': notation, 'result': '', 'error': True, 'error_str': str(e) } except BaseException as e: retval = { 'expression': expression, 'notation': notation, 'result': '', 'error': True, 'error_str': "Other error: " + str(e) } return jsonify(retval)
def main(): expression = None notation = None while expression is None or expression.strip() == '': expression = input("Please enter the expression: ") while notation not in ['y', 'n']: notation = input("Use postfix notation? [y/n]: ") print("Output:", evaluator.evaluate(expression))
def test_equation_in_postfix_not_allowed(self): with self.assertRaises(RuntimeError): evaluator.evaluate('(5 + 2)', True) with self.assertRaises(RuntimeError): evaluator.evaluate('x + 1', True) with self.assertRaises(RuntimeError): evaluator.evaluate('x = 5', True)
def test_case_8(self): self.assertEqual(2, evaluator.evaluate("4x-7(2-x)=3x+2"))
def test_case_9(self): self.assertEqual(9.8, evaluator.evaluate("2(w+3)-10=6(32-3w)"))
def test_division(self): self.assertEqual(6, evaluator.evaluate('60 / 10')) self.assertEqual(20, evaluator.evaluate('4x / 2 = 40')) with self.assertRaises(RuntimeError): evaluator.evaluate('20 / (2x) = 5')
def test_product(self): self.assertEqual(6, evaluator.evaluate('3 * 2')) self.assertEqual(20, evaluator.evaluate('x * 2 = 40'))
def test_simple_equation(self): self.assertEqual(5, evaluator.evaluate('x = 5')) self.assertEqual(5, evaluator.evaluate('2x = 10'))
def test_case_1(self): self.assertAlmostEqual(-4.7509872468, evaluator.evaluate("3+sin(6*3)-7"))
def test_log(self): self.assertEqual(evaluator.evaluate("log 100"), 2) self.assertAlmostEqual(evaluator.evaluate("log 100 (1000)"), 1.5) self.assertAlmostEqual(evaluator.evaluate("ln e"), 1)
def test_case_14(self): self.assertEqual(0.25, evaluator.evaluate("2 * x + 0.5 = 1"))
def test_trigonometric(self): self.assertAlmostEqual(evaluator.evaluate("sin(pi)"), math.sin(math.pi)) self.assertAlmostEqual(evaluator.evaluate("cos(pi)"), math.cos(math.pi))
def test_simple(self): self.assertEqual(5, evaluator.evaluate('5'))
def test_functions(self): with self.assertRaises(RuntimeError): evaluator.evaluate("sin (5x) = 5") with self.assertRaises(RuntimeError): evaluator.evaluate("sin")
def test_bad_equation(self): with self.assertRaises(RuntimeError): evaluator.evaluate('5x + 2') with self.assertRaises(RuntimeError): evaluator.evaluate('5x * x = 5') with self.assertRaises(RuntimeError): evaluator.evaluate('x + y = 0') with self.assertRaises(RuntimeError): evaluator.evaluate('5 + 2 = 0') with self.assertRaises(RuntimeError): evaluator.evaluate('5x + 2 = 0 = 0') with self.assertRaises(RuntimeError): evaluator.evaluate("x/(2x) = 5")
def test_bad_expression(self): with self.assertRaises(RuntimeError): evaluator.evaluate('5 + ')
def test_case_10(self): self.assertEqual(-3.5, evaluator.evaluate("(4-2z)/3 = 3/4 - (5z)/6"))
def test_case_17(self): self.assertEqual(1, evaluator.evaluate("Log10"))
def test_case_12(self): self.assertAlmostEqual(-0.1428571429, evaluator.evaluate("(3(7x-1)+10x-4+3x)=90x+1"))
def test_case_19(self): self.assertEqual(0, evaluator.evaluate("sinpi"))
def test_case_16(self): self.assertEqual(1, evaluator.evaluate("Log(10)"))
def test_empty_expression(self): with self.assertRaises(RuntimeError): evaluator.evaluate("")
def test_case_18(self): self.assertEqual(0.5, evaluator.evaluate("Log100(10)"))
def test_case_3(self): self.assertEqual(0.25, evaluator.evaluate("2x + 1 = 2 - 2x"))
def test_case_20(self): self.assertEqual(0, evaluator.evaluate("sin(pi)"))
def test_case_4(self): self.assertEqual(30, evaluator.evaluate("(3+(4-1))*5"))
def test_case_22(self): self.assertEqual(-1, evaluator.evaluate("sin(1.5*pi)"))
def test_case_6(self): self.assertEqual(0.25, evaluator.evaluate("2x + 1 = 2(1-x)"))
def test_case_7(self): self.assertEqual(2, evaluator.evaluate("(x-2)*(2-3)=0"))
def test_subtraction(self): self.assertEqual(3, evaluator.evaluate('5 - 2')) self.assertEqual(5, evaluator.evaluate('3x - x = 10')) self.assertEqual(0, evaluator.evaluate('5 + 5 - 10'))