не правильно работает код, по крайней мере не так задумывалось

Я написал рекурсивную функцию, и она выполняется больше раз чем надо, уже есть результат, но она как-то всё сбрасывает до начала работы.

вот код:

def multiply(string):   

    if "*" in string:

        string=string.split(" ")

        multiply_index=[i for i, j in enumerate(string) if j=="*"]

        for i, j in enumerate(string):
            multiply_result=int(string[multiply_index[i]-1])*int(string[multiply_index[i]+1])

            del string[multiply_index[i]-1]

            del string[multiply_index[i]]

            string[multiply_index[i]-1]=str(multiply_result)

            string= " ".join(string)                   

            multiply(string)

            if len(multiply_index)==1:

                break

        print(string)

    else:

        string=" ".join(string)

        return string

multiply("3 * 3 * 2")

Ответы (1 шт):

Автор решения: GrAnd

Вы, как мне кажется, делаете много лишних действий. Если подумать, алгоритм для вашей задачи довольно простой.

Придерживаясь вашей же стилистики...
Вот вариант с рекурсией:

def multiply(string):
    if "*" in string:
        expression = string.split(" ")
        multiply_index = expression.index("*")
        multiply_result = int(expression[multiply_index-1]) * int(expression[multiply_index+1])

        return multiply(' '.join(expression[:multiply_index-1] + [str(multiply_result)] + expression[multiply_index+2:]))
    return string

А вот тот же алгоритм, но используя только цикл:

def multiply(string):
    expression = string.split(" ")
    while "*" in expression:
        multiply_index = expression.index("*")
        multiply_result = int(expression[multiply_index-1]) * int(expression[multiply_index+1])

        expression = expression[:multiply_index-1] + [str(multiply_result)] + expression[multiply_index+2:]
    return " ".join(expression)

Функции работают даже с выражениями которые содержат и другие операции, вычисляя в них только умножение (вдруг вы калькулятор пишете).
Например для multiply("7 - 3 * 5 + 2 * 7") результатом будет строка 7 - 15 + 14.

→ Ссылка