Игра "Виселица" найти простое решение

word = list(input("Введите слово: "))
word_len = len(word)
life = 5
star = list(word_len*"*")
while True:
    letter = input("Введите букву:")
    if letter in word:
        print("True")
        **star[3] = letter
        print("".join(star)**)
    else:
        print("False")
        life -= 1
    print(life)

Как сделать так, чтобы при вводе буквы она появлялась на своем месте? Не могу понять, что нужно добавить в код. В строке ** буква появляется всегда на 3 месте. Нужно простое решение т.к. язык только начинаю изучать.


Ответы (2 шт):

Автор решения: Павел Ериков

Ну если прям простое решение, то функцию index вам в помощь. Она вернет индекс первого вхождения символа в строку.

Вот пример использования:

word = list(input("Введите слово: "))
word_len = len(word)
life = 5
star = list(word_len*"*")
while True:
    letter = input("Введите букву:")
    if letter in word:
        print("True")
        #Заменяем букву по индексу в слове
        star[word.index(letter)] = letter
        print("".join(star))
    else:
        print("False")
        life -= 1
    print(life)

Должен сказать, что решение выше не работает если в слове будут повторяющиеся буквы. Можно например через цикл заменять все буквы используя так же функцию index, но передавая в нее 2 параметром индекс последнего найденного символа + 1 и третьим параметром длину слова.

Например вот так:

word = str(input("Введите слово: "))
word_len = len(word)
life = 5
star = list(word_len*"*")
while True:
    letter = input("Введите букву:")
    if letter in word:
        print("True")
        lastIndex = -1
        #Пока мы не перевернули все одинаковые буквы
        while True:
            if word.count(letter, lastIndex + 1) < 1:
                break
            #Находим индекс символа пропуская те, которые левее lastIndex
            Index = word.index(letter, lastIndex + 1)
            #Заменяем букву
            star[Index] = letter
            #Запоминаем последний найденный индекс
            lastIndex = Index
        print("".join(star))
    else:
        print("False")
        life -= 1
    print(life)
→ Ссылка
Автор решения: Danis

попробуйте так:

word = list(input("Введите слово: "))
word_len = len(word)
life = 5
star = list(word_len*"*")

while True:
    letter = input("Введите букву:")
    
    if letter in word:
        print("True")
        
        for i, el in enumerate(word):
            if el == letter:
                star[i] = letter
        print("".join(star))
        
    else:
        print("False")
        life -= 1
    
    print(life)
→ Ссылка