Две основные проблемы;
Первая : Давайте посмотрим на этот цикл:
for let in mot_choisi:
letter_dict[let] = [[mot_choisi.index(let)], False]
Здесь, при каждой итерации цикла вы перезаписываетезапись для letter_dict для этого письма.Вы не хотите этого делать, потому что в итоге вы получите что-то вроде {'a': [[0], False], 'p': [[2], False], 'l': [[3], False], 'e': [[4], False]}
, что по-прежнему не то, что вы хотите.
Вместо этого вы хотите иметь возможность обновлять свою запись в словаре, а не перезаписывать ее.Мы можем сделать это, проверив, есть ли у нас запись перед выполнением нашего назначения.
for let in mot_choisi:
if not let in letter_dict:
letter_dict[let] = [[mot_choisi.index(let)], False]
else:
# Instead of overwriting the dict, we grab the list from the dict value and update it
letter_dict[let][0] += [mot_choisi.index(let)]
Second: .index
всегда возвращает индекс первого вхождения символа встрока.Поэтому, когда вы звоните 'apple'.index('p')
, он всегда будет возвращать 1
.Наблюдайте:
my_string = 'apple'
for let in my_string:
idx = my_string.index(let)
print(let, idx)
>>> ('a', 0)
>>> ('p', 1)
>>> ('p', 1) # The first occurrence is index 1
>>> ('l', 3)
>>> ('e', 4)
Как мы можем это исправить?Я бы порекомендовал изучить enumerate
my_string = 'apple'
for idx, let in enumerate(my_string):
print(let, idx)
>>> ('a', 0)
>>> ('p', 1)
>>> ('p', 2) # Now we see the index we want
>>> ('l', 3)
>>> ('e', 4)
. Я оставлю читателю в качестве упражнения объединить решения этих двух проблем