Вы повторяете весь список один раз с этим in
, затем повторите его с помощью этого for
, итерации его снова с каждым вызовом index
. Это не просто расточительная работа, но и слишком сложная задача, и она становится ошибочной.
Фактически, почти каждый раз, когда вы думаете, что хотите list.index
, вы на самом деле этого не делаете, потому что у вас возникнут проблемы с повторяющимися значениями - именно с той проблемой, с которой вы столкнулись. Если вы запросите индекс e
в elephant
, то никоим образом в списке не найдется 2
вместо 0
. Единственный способ узнать, что это отслеживать индекс, когда вы идете, например, с помощью функции enumerate
.
Таким образом, лучшим решением будет просто цикл один раз:
for i, letter in enumerate(chosen_word):
if letter == letter_input:
list_01[i] = letter_input
print("The letter is in the word")
print("Letters matched so far:","".join(list_01))
После того, как вы упростили это так, вы заметите вторую проблему: вы печатаете «Письмо в слове «один раз за каждый раз, когда он появляется, а не один раз, и вы также печатаете« Письма, сопоставленные до сих пор »один раз за каждый раз, когда он появляется, а это значит совсем не, если он вообще не появляется. Но теперь должно быть намного более очевидным, как исправить эти проблемы.
Если вы понимаете, списочные и zip
, это может быть еще более ясным, чтобы упростить его дальше:
list_01 = [letter_input if letter_input == letter else oldval
for oldval, letter in zip(list_01, chosen_word)]
Определите «проблемы». В чем ваша проблема? –
AFAIK, в игре палача, если вы угадываете письмо, не заполняете ли вы все пробелы, куда приходит письмо? Вам не нужно отображать письмо в его пустое место в случае нескольких событий. – Beginner