не правильно работает код, по крайней мере не так задумывалось
Я написал рекурсивную функцию, и она выполняется больше раз чем надо, уже есть результат, но она как-то всё сбрасывает до начала работы.
вот код:
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.