for i in range(len(equation)):
использует исходную длину equation
в качестве ограничения i
. Но строка:
equation = equation[:i+1] + '^0' + equation[i+1]
удаляет символы из equation
. Когда i
достигает новой длины equation
, вы получаете ошибку.
Вам необходимо использовать цикл while
, чтобы сравнивать текущую длину, а не исходную длину.
i = 0
while i < len(equation):
if equation[i].isdigit():
if equation[i-1] != "^":
if i == len(equation)-1:
equation = equation[:i+1] + '^0'
if equation[i+1] == "+" or equation[i+1] == "-":
equation = equation[:i+1] + '^0' + equation[i+1]
i += 1
Вы можете сделать все это с помощью подстановки регулярного выражения:
import re
def cleanEquation(equation):
equation = ''.join(equation.split())
equation = re.sub(r'(?<=\d\b)(?!\^)', '^0', equation)
return equation
(?<=\d\b)
- это вид сзади, который соответствует цифре, за которой следует граница слова, то есть последняя цифра онемения,(?!\^)
- это отрицательный прогноз, который запрещает сопоставление, если за номером уже следует ^
.