Изменение нескольких экземпляров аналогичного элемента в списке - PullRequest
0 голосов
/ 28 января 2020

Я сейчас пытаюсь сделать простую игру палача. В этом разделе я пытаюсь заменить пунктирные линии буквой, введенной пользователем. Однако для слов с повторяющимися буквами типа «яблоко» с двумя буквами «р» я сталкиваюсь с проблемами.

упрощенный пример моего кода:

word = ['a','p','p','l','e']
guess = 'p'
line = ['_','_','_','_','_']
for char in word:
    if guess == char:
        index = int(word.index(char))
        line[index] = char

вывод для печати (строка) даст просто ['', 'p', '', '', ''], заменяя только 1 'p' в списке. Любая идея, как заменить оба «р»?

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Вы можете сделать следующее:

word = ['a','p','p','l','e']
guess = 'p'
line = ['_','_','_','_','_']

for idx, char in enumerate(word):
    if guess == char:
        line[idx] = char

print(line) # ['_', 'p', 'p', '_', '_']

То же самое в одной строке, используя список пониманий

line = [char if char == guess else '_' for char in word]
print(line) # ['_', 'p', 'p', '_', '_']
0 голосов
/ 28 января 2020

Использование перечисление ,

word = ['a','p','p','l','e']
guess = 'p'
line = ['_','_','_','_','_']
for index, char in enumerate(word):
    if guess == char:
        line[index] = char
line

ИЛИ

Использование понимание списка

line = [i if i == guess else '_' for i in word]

вывод

['_', 'p', 'p', '_', '_']

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