for i in range(word_count, 0, -1):
На первой итерации цикла i примет значение word_count.
Символы в строке word имеют индексы от 0 до word_count-1.
Так что индекс, равный word_count, не существует. Ты поймаешь исключение IndexError.
И можно ли его написать более компактно? Если да, то как?
Освоить срезы (slice).
part = word[a:b:c]
будет (условно) эквивалентно
part = ''
i = a
while i < b:
part = part + word[i]
i = i + c
для положительного
c
. А для отрицательного будет
while i > b:
.
Если
a
опущено, по умолчанию это начало последовательности (для c > 0) или конец (для c < 0).
Если
b
опущено, по умолчанию это конец последовательности (для c > 0) или начало (для c < 0).
Если
c
опущено, по умолчанию это 1.
Так что для обращения строки нам нужно пройтись по всей строке с шагом -1. Получим вот что:
word_reversed = word[::-1]
# это эквивалентно
word_reversed = word[len(word)-1:-1:-1]