예제 #1
0
def calculating_w_out_br(
        arr):  #считаем выражение без скобок с помощью двойного стека
    st1 = []
    st2 = []
    temp = 0
    znaki = ('+', '-', '*', '/', '^')

    if arr == [
            '='
    ]:  #если после парсинга строки нам пришел массив [=], то выводим ошибку
        return 'input data error // incorrect symbols or wrong data'

    if len(arr) == 1:  #если длина массива - один элемент, то его и возвращаем
        return arr[0]

    for i in arr:  #разбиваем массив на числа и знаки
        if i in znaki:
            st2.append(i)
        else:
            st1.append(i)

    while st2 != []:  #считаем, пока не освободим массив с операциями
        if 'Result too large' in st1:
            return 'Result too large'
        elif 'zero division' in st1:
            return 'zero division'
        if len(st2) != 1:
            try:
                if priority(st2[temp + 1]) >= priority(st2[temp]):
                    st1[temp] = return_res(st2[temp], st1[temp], st1[temp + 1])
                    del st2[temp]
                    del st1[temp + 1]
                    temp = 0
                else:
                    temp += 1
            except:
                if priority(st2[temp]) <= priority(st2[temp - 1]):
                    st1[temp] = return_res(st2[temp], st1[temp], st1[temp + 1])
                    del st2[temp]
                    del st1[temp + 1]
                    temp = 0

        elif len(st2) == 1:
            st1[0] = return_res(st2[0], st1[0], st1[1])
            del st2[0]
            del st1[1]

    try:
        if str(st1[0]
               )[-2:] == '.0':  #переводим обратно в int, если это возможно
            return int(st1[0])
        else:
            return st1[0]
    except:
        return 'input data error // incorrect symbols or wrong data'
예제 #2
0
def test_return8():
    znak = '^'
    a = 12
    b = 2
    res = 144
    assert return_res(znak, a, b) == res
예제 #3
0
def test_return7():
    znak = '^'
    a = 2
    b = 0
    res = 1
    assert return_res(znak, a, b) == res
예제 #4
0
def test_return6():
    znak = '/'
    a = 2
    b = 0
    res = 'zero division'
    assert return_res(znak, a, b) == res
예제 #5
0
def test_return5():
    znak = '/'
    a = 150
    b = 3
    res = 50
    assert return_res(znak, a, b) == res
예제 #6
0
def test_return4():
    znak = '*'
    a = 2
    b = 0
    res = 0
    assert return_res(znak, a, b) == res
예제 #7
0
def test_return3():
    znak = '*'
    a = 2
    b = 3
    res = 6
    assert return_res(znak, a, b) == res
예제 #8
0
def test_return2():
    znak = '-'
    a = 2
    b = 3
    res = -1
    assert return_res(znak, a, b) == res
예제 #9
0
def test_return1():
    znak = '+'
    a = 2
    b = 3
    res = 5
    assert return_res(znak, a, b) == res
예제 #10
0
def test_return():
    znak = '+'
    a = 0
    b = 1
    res = 1
    assert return_res(znak, a, b) == res