Вам не нужен дикт, чтобы сопоставить индексы с буквами. Сама строка уже может быть проиндексирована по буквенным индексам. Вы должны перетасовать индексы вместо букв, чтобы можно было перебирать перетасованные индексы, чтобы разоблачить соответствующие буквы одну за другой:
import time
import random
word = 'administrator'
indices_shuffled = list(range(len(word)))
random.shuffle(indices_shuffled)
letters = ['_'] * len(word)
for i in indices_shuffled:
letters[i] = word[i]
print(''.join(letters))
time.sleep(1)
Пример вывода:
_d___________
_d_____t_____
_dm____t_____
_dm__i_t_____
_dm__ist_____
_dm__ist_a___
_dm__ist_a_o_
adm__ist_a_o_
admi_ist_a_o_
admi_istra_o_
admi_istra_or
administra_or
administrator
Это точно правильно.
Но Вы не использовали бы dealloc
, при использовании объекта, потому что Вы не знаете, каково сохранить количество. И при этом Вы не заботитесь. Вы просто говорите, что Вам больше не нужен он путем вызова release
. И после того как никто не делает, объект будет звонить dealloc
на себе.
Все исправляют, но одна ключевая суть, которую Вы упускаете, - то, что Вы никогда не должны называть dealloc сами. Вот некоторая информация из документации Apple относительно dealloc метода NSOBJECT:
Вы никогда не отправляете сообщение dealloc непосредственно. Вместо этого dealloc метод объекта вызывается косвенно посредством выпуска метод протокола NSObject (если результаты сообщения выпуска в получателе сохраняют количество, становящееся 0). См. Руководство по программированию управления памятью для Какао для получения дополнительной информации об использовании этих методов.
Подклассы должны реализовать свои собственные версии dealloc для разрешения выпуска любой дополнительной памяти, использованной объектом — таким как динамично выделенное устройство хранения данных для данных или переменных экземпляра объекта, принадлежавших освобожденному объекту. После выполнения определенного для класса освобождения метод подклассов должен включить версии суперкласса dealloc через сообщение к супер: