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

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

Условие:

Разбиение строки на лексемы (Tokenizing) представляет собой процесс преобразования исходной строки в список из подстрок, называемых лексемами (token). Зачастую со списком лексем работать бывает проще, чем со всей исходной строкой, поскольку в ней могут присутствовать неравномерные разрывы. Кроме того, иногда бывает непросто на лету определить, где заканчивается одна лексема и начинается другая.
В математических выражениях лексемами являются, например, операторы и числа. Здесь и далее мы будем причислять к списку операторов следующие: *, /, ˆ, - и +. Операторы легко идентифицировать, поскольку эти лексемы всегда состоят ровно из одного символа и никогда не являются составной частью других лексем. Числа выделить бывает сложнее, поскольку эти лексемы могут состоять из нескольких символов. Любая непрерывная последовательность цифр должна восприниматься как одна числовая лексема.
Напишите программу, которая из строки, содержащую математическое выражение получает список лексем. Каждая лексема должна быть либо оператором, либо числом.

Код:

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


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

print(result_list)