Строка индекс строки против строки без индекса - PullRequest
0 голосов
/ 16 января 2019

Я работал над заданием для курса, который состоял из программы, которая печатает только те слова, которые начинаются с определенного диапазона букв.

Я безуспешно пытался использовать этот код:

sentence = input("Enter a one sentence quote, non-alpha separate words: ")
word = ""

for letter in sentence:
    if letter.isalpha():
        word += letter
    else:
        if word[0].lower() >= "h".lower():
            print(word.upper())
            word = ""                   
        else:
            word = ""

print(word.upper())

Я получил ошибку index out of range. Я получил его на работу только после замены линии
(word[0].lower() >= "h".lower())
с линией
(word.lower() >= "h".lower()).

Почему строка с адресом строкового индекса не работает?

1 Ответ

0 голосов
/ 16 января 2019

Вы получите эту ошибку, когда word - пустая строка.

Это произойдет, если у вас есть два неалфавитных символа подряд. После проверки первой буквы вы назначаете word = "". Затем, когда вы обрабатываете следующий символ, word все еще пуст, поэтому нет word[0].

Если первая буква по крайней мере "h" `, то и слово целиком, поэтому его не нужно индексировать. Просто напишите:

if word.lower() >= "h":

Или вы можете проверить, есть ли что-то в word сначала:

if word and word[0].lower() >= "h":

Нет необходимости писать "h".lower(). Это уже строчные.

Поскольку вам нужно переинициализировать word независимо от того, начинается ли он с буквы в диапазоне или нет, уберите это назначение

Таким образом, исправленный код должен быть:

for letter in sentence:
    if letter.isalpha():
        word += letter
    else:
        if word and word[0].lower() >= "h":
            print(word.upper())
        word = ""
...