Для этой реализации у вас всегда должно быть 10 элементов в списках.Например, через десятилетия у вас должна быть какая-то строка, представляющая значения между 10-20, даже если она не используется, так как в противном случае индексация массива была бы неправильной.
Тем не менее в этом коде много ошибок.Попробуйте это.
number = input("Enter a value: ")
ones = ["", "one ", "two ","three ", "four", "five ", "six ", "seven ", "eight ", "nine "]
teens = ["ten ", "eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen "]
decades = ["", "onety", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety "]
hundreds = ["", "one hundred ", "two hundred ", "three hundred ", "four hundred ", "five hundred", "six hundred ", "seven hundred", "eight hundred", "nine hundred"]
word = ""
change = len(number)
while change > 0:
if number == "0":
word ="zero"
break
elif change > 1 and number[change - 2] == "1":
for i in range(0,10):
if number[change - 1] == str(i):
word = teens[i] + word
if change == 2:
break
else:
for i in range(0,10):
if number[change - 1] == str(i):
word = ones[i] + word
if change > 1 and number[change-2]!="1":
for i in range(0,10):
if number[change - 2] == str(i):
word = decades[i] + word
if change > 2:
for i in range(0,10):
if number[change - 3] == str(i):
word = hundreds[i] + word
change = change - 3
print(word)