2013-09-29 4 views
-5

Я пишу программу, которая играет палача с пользователем. На данный момент у него есть два списка: один список, содержащий изменчивую версию слова, а другой - «статус» догадок пользователя. Так что, если слово было «Питон»:Заменить объект списка на основе индексов другого списка (Python)

word = ["p", "y", "t", "h", "o", "n"] 

status = [] 
for number in range(0, len(word)): 
    status.append("_") 

print(status) 
>>> ["_", "_", "_", "_", "_", "_"] 

Мой план состоит в том, что после каждого input("Enter guess: ") я могу заменить «_» с догадка, согласно индексу, что догадка в списке «слово». (это имеет смысл ?!)

Затем, после каждой догадки, я могу print("".join(status)), чтобы пользователь мог видеть, как они идут.

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

Вот пример того, как я хочу, чтобы программа работы:

word = ["p", "y", "t", "h", "o", "n"] 
status = ["_", "_", "_", "_", "_", "_"] 

Enter guess: t 
_ _ t _ _ _ 

Enter guess: n 
_ _ t _ _ n 

и т.д. и т.п. (не беспокойтесь о петле и т.д., потому что я есть, что вниз :) Я просто не конечно, как я могу редактировать один список на основе индексов другого!)

Я не планировал изменять слово, так что в конце я мог бы сравнить «статус» и «слово», чтобы проверить, выиграл, но я был бы открыт для всех предложений !! : D

Спасибо!

+0

«I [..] наткнулся на метод list.index (х), но я читал, что это возвращает индекс первого элемента, значение которого равно x. " - Это именно то, что вам нужно. вы можете сделать цикл, чтобы найти все вхождения. покажите нам код. –

ответ

0

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

indices = [i for i, elem in enumerate(word) if elem == x] 

Таким образом, вы бы:

>>> word = ["p", "y", "t", "h", "o", "n"] 
status = ["_", "_", "_", "_", "_", "_"] 
>>> >>> word 
['p', 'y', 't', 'h', 'o', 'n'] 
>>> status 
['_', '_', '_', '_', '_', '_'] 

Затем пользователь делает предположение, что у нас есть guess = 't', то:

>>> guess = 't' 
>>> indices = [i for i, x in enumerate(word) if x == guess] 
>>> indices 
[2] 

затем мы мутировать список состояний, чтобы показать-е Индексы е, которые были найдены:

for i in indices: 
    status[i] = guess 

Мы можем затем отобразить status в виде строки:

print(' '.join(status)) 
_ _ t _ _ _ 
+0

Отлично! Благодарю. У меня всегда были проблемы с пониманием списков ... но опять же я потратил 5 раз на Python :) – chillman

0

Это должно работать:

word = ['p','y','t','h','o','n'] 
user_letter = raw_input("Enter a letter\n") 

status = ['_' for i in xrange(len(word))] 
for index, ltr in enumerate(word): 
    if ltr == user_letter: 
     status[index] = user_letter 

Это предполагает, что user_letter имеет длину 1. Конечно, что-то вы можете убедиться сами.

Смежные вопросы