python - IndexError : string index out of range on equation cleaning function

标签 python python-3.x indexing error-handling

我有将^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/

相关文章:

python - 在python中加载MIT-BIH心律失常数据库

python - 为什么 a//b 和 np.floor(a/b) 产生不同的结果?

mysql - 由于选择性低(所有 NULL),MariaDB 不在 1 列自连接上使用索引

python - 在 OSX 10.11 (El Capitan) (系统完整性保护) 中安装 Scrapy 时出现 "OSError: [Errno 1] Operation not permitted"

python - 如何避免循环回到代码中的行?

Python——进口数量限制?

linux - python 将 os.environ 传递给子 gnome 终端

python-3.x - scikit-learn 聚类 : predict(X) vs. fit_predict(X)

python - 在多索引 Python Panda 数据框中过滤多个项目

mysql - 哪个 INSERT/UPDATE/SELECT 比例推荐使用索引?