Получение ошибки индекса при использовании цикла for - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь написать некоторый код для анализа произвольной строки s, чтобы вернуть максимально длинную строку из s в алфавитном порядке. Я думаю, что я получаю правильную идею, но я продолжаю получать IndexError, когда я использую для l oop. Вот код (в Python) и некоторое объяснение того, откуда возникла ошибка после:

s = 'azcbobobegghakl'
a = 'abcdefghijklmnopqrstuvwxyz'
temp = ''
temp_len = len(temp)
longest = ''
longest_len = len(longest)
for i in range(len(s)):
    temp += s[i]
    if s[i+1] not in a[a.index(s[i]):len(a)]:
        temp = ''
    if temp_len > longest_len:
        longest = temp
print(longest)

Кажется, что ошибка возникла из первого оператора if-else внутри l oop тело. Всякий раз, когда у меня есть «s [i + 1]», я получаю IndexError только для этой строки кода. Это не происходит, когда я изменяю его на "s [i]". Кто-нибудь знает причину этой ошибки? Могу ли я не ссылаться на индексы за пределами индекса текущей итерации для l oop? Кроме того, заранее спасибо, и любая помощь приветствуется.

Сообщение об ошибке говорит:

Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/edX/introduction.py", line 10, in <module>
    if s[i+1] not in a[a.index(s[i]):len(a)]:
IndexError: string index out of range

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Когда i == len(s)-1, в конце вашего l oop, s[i+1] равно s[len(s)], что выходит за пределы.

0 голосов
/ 21 февраля 2020

Можно попробовать несколько вариантов:

  • поймать ошибку: try: и except:
  • использовать while вместо for
  • в зависимости от используемого вами текста, EOL может быть полезным

Было бы лучше поэкспериментировать с несколькими различными вариантами, которые улучшат ваше программирование в целом.

...