我在使用这个python程序时遇到了麻烦

时间:2017-08-25 21:52:47

标签: python error-correction

我是初学者,我正在尝试编写一段代码,告诉你按字母顺序写的最长子字符串有多长。

到目前为止,我有:

    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:字符串索引超出范围

有人可以告诉我我哪里出错了以及如何解决它

4 个答案:

答案 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)