Вы звоните на word[0]
.Доступ к первому элементу итерируемой строки word
.Если word
пусто (то есть word == ""
), «первый элемент» не доступен;таким образом вы получаете IndexError
.Если «слово» начинается с неалфавитного символа (например, цифры или тире), то это произойдет.
Вторая ошибка, с которой у вас есть второй фрагмент кода, пропускающий последнее слово, из-за подхода, который вы используете для этой проблемы.Похоже, что вы пытаетесь пройти по предложенному вами предложению, символ за символом, и решить, печатать ли слово после прочтения его (которое вы знаете, потому что нажали пробел.Но это приводит к проблеме с вашим вторым подходом, который заключается в том, что он не печатает последнюю строку. Это потому, что последний символ в вашем предложении не является пробелом - это просто последняя буква в последнем слове. Итак, вашЦикл else
никогда не выполняется.
Я бы рекомендовал использовать совершенно другой подход, используя метод string.split()
. Этот метод встроен в python и преобразует одну строку в список строк меньшего размера.разделите пополам указанный вами символ / подстроку. Поэтому, если я сделаю
quote = "Hello this is a sentence"
words = quote.split(' ')
print(words)
, вы увидите следующее:
['Hello', 'this', 'is', 'a', 'sentence']
Несколько вещей, которые нужно сохранитьпомните о вашем следующем подходе к этой проблеме:
- Вам необходимо учитывать пустые слова (например, если у меня есть два пробела подряд по какой-то причине), и убедиться, что они неt сломать скрипт.
- Вам необходимо учитывать не алфавитно-цифровые символы, такие как цифры и тире.Вы можете либо игнорировать их, либо обращаться с ними по-другому, но у вас должно быть что-то на месте.
- Вам нужно убедиться, что вы обрабатываете последнее слово в какой-то момент, даже если предложение не заканчивается напробел.
Удачи!