Ошибка Python: "IndexError: индекс строки вне диапазона"
В настоящее время я изучаю python из книги под названием "Python для абсолютного новичка (третье издание)". В книге есть упражнение, в котором описывается код для игры в палач. Я следил за этим кодом, но я все время возвращаю ошибку в середине программы.
Вот код, вызывающий проблему:
if guess in word:
print("\nYes!", guess, "is in the word!")
# Create a new variable (so_far) to contain the guess
new = ""
i = 0
for i in range(len(word)):
if guess == word[i]:
new += guess
else:
new += so_far[i]
so_far = new
Это также ошибка, которую он возвращает:
new += so_far[i]
IndexError: string index out of range
Может кто-нибудь помочь мне с тем, что происходит не так, и что я могу сделать, чтобы исправить это?
edit: Я инициализировал переменную so_far следующим образом:
so_far = "-" * len(word)
Ответы
Ответ 1
Похоже, вы слишком сильно отшлифовали so_far = new
. Попробуйте следующее:
if guess in word:
print("\nYes!", guess, "is in the word!")
# Create a new variable (so_far) to contain the guess
new = ""
i = 0
for i in range(len(word)):
if guess == word[i]:
new += guess
else:
new += so_far[i]
so_far = new # unindented this
Ответ 2
Вы повторяете одну строку (word
), но затем используете индекс для поиска символа в so_far
. Нет гарантии, что эти две строки имеют одинаковую длину.
Ответ 3
Эта ошибка произойдет, когда количество догадок (so_far) меньше длины слова. Пропустили ли вы инициализацию переменной so_far где-то, которая устанавливает ее как-то вроде
so_far = " " * len(word)
?
Edit:
попробуйте что-то вроде
print "%d / %d" % (new, so_far)
перед строкой, которая выдает ошибку, поэтому вы можете точно видеть, что пошло не так. Единственное, о чем я могу думать, это то, что so_far находится в другой области, и вы фактически не используете экземпляр, который вы думаете.
Ответ 4
В вашем коде было несколько проблем.
Здесь у вас есть функциональная версия, которую вы можете проанализировать (Позволяет установить "привет" в качестве целевого слова):
word = 'hello'
so_far = "-" * len(word) # Create variable so_far to contain the current guess
while word != so_far: # if still not complete
print(so_far)
guess = input('>> ') # get a char guess
if guess in word:
print("\nYes!", guess, "is in the word!")
new = ""
for i in range(len(word)):
if guess == word[i]:
new += guess # fill the position with new value
else:
new += so_far[i] # same value as before
so_far = new
else:
print("try_again")
print('finish')
Я попытался написать его для py3k с py2k ide, будьте осторожны с ошибками.