如何避免我遇到此功能的错误?我真的不明白为什么我会收到这个错误,我只是想不出解决方案。我非常感谢任何提示!谢谢。
def myfunction(p):
result = []
count = 1
if not p:
return result
else:
if p[0] == p[1]:
count + 1
return myfunction(p[1:])
else:
result += (p[0],count)
count = 1
return myfunction(p[1:])
该函数应返回如下内容:
myfunction("qqwweerrttyy")
[("q",2),("w",2),("e",2),("r",2),("t",2),("y",2)]
错误是:
File "test.py", line 36, in myfunction
return myfunction(p[1:])
File "test.py", line 32, in myfunction
return myfunction(p[1:])
File "test.py", line 30, in myfunction
if p[0] == p[1]:
IndexError: string index out of range
答案 0 :(得分:0)
因为即使p[1]
可能包含单个元素,您也可以对p
进行索引;你必须确保p[1]
存在。您可能还想说count += 1
,而不是count+1
,这似乎在您提供的代码中没有做任何工作。 (我假设count
和result
是全局变量;否则代码没有意义。)
这是一个有效的代码:
count = 1
result = []
def myfunction(p):
global count
global result
if not p:
return result
else:
if len(p) >= 2 and p[0] == p[1]: # Make sure p[1] exists
count += 1
return myfunction(p[1:])
else:
result += (p[0],count)
count = 1
return myfunction(p[1:])
例如,当给定字符串"lllalala"
时,输出符合预期:
>>> myfunction("lllalala")
['l', 3, 'a', 1, 'l', 1, 'a', 1, 'l', 1, 'a', 1]
答案 1 :(得分:0)
您的功能的第一个问题,即您询问的问题是:您检查p
是否为空,然后您访问两个元素p[0]
和p[1]
。您需要先检查p
是否至少包含两个元素,然后才能访问p[1]
。
if len(p) < 2:
return result
else:
if p[0] == p[1]:
...
解决此问题后,您将找到下一个错误。