我是初学者,我正在尝试编写一段代码,告诉你按字母顺序写的最长子字符串有多长。
到目前为止,我有:
s = 'azcbobobegghakl'
n=len(s)
i=0
longest=1
while i<n+1:
print(s[i])
if s[i] < s[i+1]:
longest+=1
i+=1
else:
i+=1
print(longest)
但是我一直收到错误:
IndexError:字符串索引超出范围
有人可以告诉我我哪里出错了以及如何解决它
答案 0 :(得分:2)
试试这个:
s = 'azcbobobegghakl'
n=len(s)
longest=1
counter=1
for i in range(len(s)-1):
print(s[i])
if s[i] < s[i+1]:
counter+=1
else:
if counter > longest:
longest = counter
counter = 1
if counter > longest:
longest = counter
print(longest)
答案 1 :(得分:1)
像这样在
while i < n-1:
Change n+1 to n-1
n is length of string
Index of string : 0,1,.....,n-1
In your program one iteration will check next element also:
ie: when I == 0 , it will access str[0], str[1]
Like i == n - 2 , str[n-2], str[n-1]
Now if your condition is i less than n +1 then it will check
i == n , str[n], str[n+1] it will give you index out of range
because str[n+1] doesn't exist
答案 2 :(得分:0)
您在第11行IndexError: string index out of range
中获得的错误为if s[i] < s[i+1]:
。问题是while循环中的i
会变得太大(大于n-1)。您的循环条件应该是while i<n-1:
和不 while i<n-1:
,就像其他人在答案中建议的那样。您正在检查字符串s
中的每个字符是否较小(如果它在字母表中显示之前,实际上,Python检查它是否具有较小的Unicode代码,因此您只需要使用小写字母或仅使用大写字母)字符串中的下一个字符。除了最后一个字符外,您可以检查字符串中的所有字符,因为最后一个字符没有后继字符(最后一个字符后面没有下一个字符)。这就是为什么你的while循环中应该有i<n-1:
的原因。
完整的工作代码:
s = 'azcbobobegghakl'
n=len(s)
i=0
longest=1
print(n)
while i<n-1:
print(s[i])
if s[i] < s[i+1]:
longest+=1
i+=1
else:
i+=1
print(longest)
答案 3 :(得分:0)
试试这个:
s = 'azcbobobegghakl'
n=len(s)
i=0
longest=1
while i<n:
print(s[i])
if i == n-1:
break
elif s[i] < s[i+1]:
longest+=1
i+=1
else:
i+=1
print(longest)