2017-09-13 131 views
0

我一直在試圖編寫一個程序,以字符串的字母順序打印出最長的子字符串。 這裏是我的代碼:索引錯誤:字符串索引超出範圍python

s = 'azcbobobegghakl' 
n = 0 
longest = "a" 

while n < len(s): 
    x = n 
    for i in s: 
     if s[x + 1] >= s[x]: 
      x += 1 
     else: 
      break 

    sub_string = (s[n:x+1]) 
    if len(sub_string) > len(longest): 
    longest = sub_string 
    n += 1 

打印(「按字母順序最長子是:」 +最長)

因爲我遞增的「X」在每次迭代,因此,指數很快超出範圍。只是想知道是否有辦法解決這個問題。 謝謝。

+0

我看到一些破損的縮進。 –

+0

損壞的縮進,你永遠不會增加n的值,它將是一個無限循環,除非它擊中你的break語句 – AK47

+0

謝謝。在此處將代碼格式化時錯過了縮進。但那並沒有解決我的問題。不過謝謝。 – Tpenny

回答

0

嘗試這種情況: -

s = 'azcbobobegghakl' 
n = 0 
longest = "a" 
while n < len(s): 
    x = n 
    for i in s: 
     if x+1<len(s) and s[x + 1] >= s[x]: 
      x += 1 
     else: 
      break 
    sub_string = (s[n:x+1]) 
    if len(sub_string) > len(longest): 
     longest = sub_string 
    n += 1 
print(longest) 

編輯:當n = len(s)-1 S [X + 1]將指向S的第n個字符,這是無效的。所以你需要一個額外的條件x+1<len(s)來保持這一點。

+1

這是一個非常男人。你不會相信我試圖解決這個問題的時間。感謝一羣 – Tpenny

+0

@jean我解釋了爲什麼他的代碼在評論中不起作用。無論如何,我會做一個編輯。感謝您指點。 – markroxor