我的代码给出了一个我无法理解的错误

2024-04-26 13:14:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道以前有人问过这个问题,但我正在努力找出我的代码有什么问题。 我应该按字母顺序打印最长的子字符串。 这是我在Python2.7中的代码 https://ideone.com/SXQGdd

s='abc'
b=[]
count=1
j=0
for i in range(0,len(s)-2):
 if(s[i]<=s[i+1]):
  count=count+1
  if(i==(len(s)-2)):
    x=s[j:(j+count)]
    b.append(x)
    break

  if(s[i]>s[i+1]):
    x=s[j:(j+count)]
    b.append(x)
    continue



max_length=len(b[0])
elem=b[0]
for i in range(0,len(b)-1):
    if(len(b[i+1])>max_length):
        max_length=len(b[i+1])
        elem=b[i+1]


print"Longest substring in alphabetical order is:",elem

错误如下:

IndexError: list index out of range

  1. 代码到底出了什么问题?你知道吗
  2. 另外,算法中是否有任何逻辑错误(我的意思是代码是否会按字母顺序为任何其他字符串找到最长的子字符串)?你知道吗

Tags: 字符串代码inforlenif顺序count
1条回答
网友
1楼 · 发布于 2024-04-26 13:14:24

索引器20: len(b[0])行中引发,因为b为空,因为if i == len(s)-2从不为真,因为range不包含端点。参考@swenzel

在您的第一个for循环中,您的逻辑没有正确发生,并且超过了索引值。这就是为什么你会收到错误信息。你知道吗

我刚换了你的第一圈。所以,你可以试试这个。没事的

s='abc'
b=[]
store = 0
for i in range(0,len(s)):
    sub_value = s[i]
    if store == len(s)-1:
        break
    elif i == store:
        while store+1 <len(s) and s[store] <= s[store+1]:
            store += 1
            sub_value += s[store]
    b.append(sub_value)

print b
max_length= len(b[0])
elem = b[0]
for i in range(0,len(b)-1):
    if(len(b[i+1])>max_length):
        max_length=len(b[i+1])
        elem = b[i+1]

print"Longest substring in alphabetical order is:",elem

输出:

Longest substring in alphabetical order is: abc

相关问题 更多 >