Esempio n. 1
0
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])
Esempio n. 2
0
 def test_add(self):
     self.assertEqual(calculate('+', 3, 4), 7)
Esempio n. 3
0
 def test_expo(self):
     self.assertEqual(calculate('^', 3, 2), 9)
Esempio n. 4
0
 def test_div(self):
     self.assertAlmostEqual(calculate('/', 4, 5), 0.8)
Esempio n. 5
0
 def test_mult(self):
     self.assertEqual(calculate('*', 3, 4), 12)
Esempio n. 6
0
 def test_sub(self):
     self.assertEqual(calculate('-', 4, 3), 1)