Когда я ввожу 'l' в качестве ввода, он занимает только одно место вместо обоих - PullRequest
0 голосов
/ 25 марта 2020
import random

word_list = ['kill', 'happy']
choose = random.choice(word_list)
choose_list = list(choose)
players_list = ['_'] * len(choose)
while choose_list != players_list:
# inp is the input of the user
     inp = input("Input:\n")
# index_inp is the position of the input
     index_inp = choose_list.index(inp)
     if inp in choose_list:
           players_list[index_inp] = inp
           print(players_list)

Когда слово kill и я ввожу 'l', он вставляет символ только в одно место в моем players_list вместо обоих мест.

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Метод list.index(x) возвращает индекс первого элемента, значение которого равно x.

. Необходимо найти все индексы элементов, значение которых равно x. Вы можете сделать это, используя понимание списка.

indices = [i for i, x in enumerate(choose_list) if x == inp]

Затем установите значение для всех индексов, равное inp.

...
while choose_list != players_list:
     inp = input("Input:\n")
     indices = [i for i, x in enumerate(choose_list) if x == inp]
     for i in indices:
         players_list[i] = inp
0 голосов
/ 25 марта 2020

Кейур Потдар уже объяснил, что стало причиной вашей проблемы, и предоставил решение, которое, я считаю, будет работать. При этом, вы также можете обновить этот список только одним длинным безобразным списком после ввода пользовательского ввода:

import random

word_list = ['kill', 'happy']
choose = random.choice(word_list)
choose_list = list(choose)
players_list = ['_'] * len(choose)

while choose_list != players_list:
    inp = input("Input:\n")
    # The following is a single list comp for updating players_list:
    players_list = [
        inp if (
            x == inp and players_list[i] == '_'
        ) else players_list[i] for i,x in enumerate(choose_list)
    ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...