def eqIterator(eqArray): calculation = False index = 0 parenCount = 0 leftNum = 0 rightNum = 0 PEMDAS = ['(', '^', '*', '/', '+', '-'] while index < len(PEMDAS): for i in range(len(eqArray)): place = eqArray[i] if (place == '('): parenCount = parenCount + 1 elif (place == ')'): parenCount = parenCount - 1 if (parenCount == 0): first_opening = eqArray.index('(') recur_list = eqArray[first_opening + 1:i] eqArray[i] = eqIterator(recur_list) del eqArray[first_opening:i] break else: if (place == PEMDAS[index]): leftNum = eqArray[i - 1] rightNum = eqArray[i + 1] eqArray[i] = calculate(place, leftNum, rightNum) eqArray.pop(i - 1) eqArray.pop(i) calculation = True break else: continue if (calculation == True): calculation = False continue else: index += 1 calculation = False return float(eqArray[-1])
def test_add(self): self.assertEqual(calculate('+', 3, 4), 7)
def test_expo(self): self.assertEqual(calculate('^', 3, 2), 9)
def test_div(self): self.assertAlmostEqual(calculate('/', 4, 5), 0.8)
def test_mult(self): self.assertEqual(calculate('*', 3, 4), 12)
def test_sub(self): self.assertEqual(calculate('-', 4, 3), 1)