我有将^0附加到代码中所有常量的代码,因此,如果您使用字符串“3x ^ 2 + 14 + 2”,它将变为“3x ^ 2 + 14 ^ 0 + 2 ^ 0”,但是我得到了IndexError,我不知道我在做什么错。这是我的代码:

def cleanEquation(equation):
    equation = ''.join(equation.split())
    for i in range(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]

cleanEquation("x+14+y+14")

每当我尝试运行此命令时,我都会得到:
IndexError: string index out of range

这只是函数的一小段,整个函数将每个系数的开头加1,并将每个没有系数的变量加^ 1,并且这两个部分由于某种原因即使它们的格式相同,也可以正常工作功能。如果需要,我可以发布全部功能。

最佳答案

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)是在后面的匹配数字,后跟单词边界(即 NumPy 的最后一位)。 (?!\^)是一个否定的超前查询,如果^后跟数字,则会阻止匹配。

关于python - IndexError : string index out of range on equation cleaning function,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58383273/

10-09 03:04