41. Унарные и бинарные операторы. (в коде есть строки из следующих тем: "функции").

(открыть в новой вкладке)

Условие:

Математические операторы бывают унарными (unary) и бинарными (binary). Унарные операторы взаимодействуют с одним значением, тогда как бинарные – с двумя. Например, в выражении 2 * –3 оператор * является бинарным, поскольку взаимодействует с двумя числами: 2 и -3. При этом сам оператор – здесь унарный, ведь он применяется только к одному числу 3. Одного лишь символа оператора недостаточно, чтобы определить, является ли он унарным или бинарным. Например, хотя в предыдущем случае оператор – был унарным, в выражении 2 – 3 он приобретет роль бинарного. Подобная неоднозначность, также характерная для оператора сложения, должна быть устранена до применения других операций к элементам списка лексем математического выражения.
Напишите программу для поиска унарных операторов + и – в списке лексем и их замены на сочетание символов u+ и u– соответственно. Программа должна составить список лексем, в котором унарные операторы заменены на u+ и u-.

Код:

def my_f2(result_list):
    uno_list = []
    znaki = ["*", "/", "^", "-", "+"]
    znaki_2 = ["-", "+"]
    temp = ""
    for index, i in enumerate(result_list):
        if index == 0 and i in znaki_2:
            uno_list.append("u" + i)
            temp = i
        elif i not in znaki_2:
            uno_list.append(i)
            temp = i
        elif i in znaki_2 and temp in znaki:
            uno_list.append("u" + i)
            temp = i
        elif i in znaki_2 and temp not in znaki:
            uno_list.append(i)
            temp = i    
    return uno_list  


def my_f(digit):
    result_list = []
    znaki = ["*", "/", "^", "-", "+"]
    temp = ""
    for i in digit:
        if i == " ":
            pass
        elif i in znaki:
            result_list.append(temp)
            result_list.append(i)
            temp = ""
        elif i not in znaki:
            i = float(i)
            i = str(i)
            temp += i
    if len(temp) > 0:
        result_list.append(float(temp))
    result_list = [i for i in result_list if i != ""]
    return (my_f2(result_list))
        

# ввод данных
while True:
    digit = input("%100s" % "Введите математическое выражение: ")
    try:
        result_list = my_f(digit)         
        break
    except:
        print("%99s" % "Вы ввели не цифры с операторами.")
        print()

print(result_list)