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]