s='saamaarrr'
for i in range(0, len(s)-1):
while(s[i]==s[i+1]):
i+=1
print(s[i])
IndexError:字符串索引超出范围
我是python的新手。我知道这个错误的原因。但我不知道为什么会在这里发生。我也读过这个问题的其他答案
答案 0 :(得分:1)
范围对象包括左边界和排除右边界
如果字符串长度为9个字符,就像在您的情况下一样,范围序列将是:
0 1 2 3 4 5 6 7 8
让我们来看看当i
循环中的变量for
达到8时会发生什么。
在while
循环中,您需要检查s[8]
是否等于s[9]
。由于Python中的索引从0开始,与许多其他编程语言一样,字符串s
的最后一个字母将具有索引8,这意味着索引9超出了字符串的范围。这会导致错误。
要解决此问题,请按照以下方式进行for
循环:
for i in range(0, len(s)-2):
这样,范围序列将为0 1 2 3 4 5 6 7
,因此不会导致错误。
此外,您不必将左边界指定为0,它是默认值,因此这也有效:
for i in range(len(s)-2):
答案 1 :(得分:0)
while(s[i] == s[i+1])
这会导致问题,因为当i = len(s)-1时,s [i + 1]将超出范围!
你的for循环内部不需要一个while循环。调整FOR中的范围语句,然后尝试使用if语句......
for i in range(0, len(s)-2):
If s[i]==s[i+1]:
print(s[i])
答案 2 :(得分:0)
问题是您要在测试s[i+1]
的实际值之前访问i+1
的值。我还建议您不要在for
和while
循环中使用相同的变量(i)。
结果如下:
s='saamaarrr'
for i in range(0, len(s)-1):
j = i + 1
while (j < len(s)) and (s[i]==s[j]):
print(s[j])
j+=1
这是输出:
a
a
r
r
r
不知道你想要实现什么,但是......
希望它会有所帮助!