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