Вы также можете создать модуль timer manager , который будет отслеживать текущие таймеры и позволит вам получать, добавлять, останавливать и останавливать все таймеры.
var timers = (function() {
//
var timers = []
//
const getIndex = (array, attr, value) => {
for (let i = 0; i < array.length; i += 1) {
if (array[i][attr] === value) {
return i
}
}
return -1
};
// add
const add = (callback, time) => {
var id = setTimeout(() => {
let index = getIndex(timers, 'id', id)
timers.splice(index, 1)
callback()
}, time)
timers.push({
id: id,
time: time,
debug: callback.toString()
})
};
// get all active timers
const all = () => timers
// stop timer by timer id
const stop = (id) => {
if (!isNaN(id)) {
let index = getIndex(timers, 'id', id)
if (index !== -1) {
clearTimeout(timers[index].id)
timers.splice(index, 1)
}
}
};
// stop all timers
const stopAll = () => {
for (let i = 0; i < timers.length; i++) {
clearTimeout(timers[i].id)
}
timers = []
};
return {
add: add,
all: all,
stop: stop,
stopAll: stopAll,
};
})();
//
timers.add(function() {
console.log("timeout 1 fired");
}, 1000)
timers.add(function() {
console.log("timeout 2 wont get fired");
}, 2000)
timers.add(function() {
console.log("timeout 3 fired");
}, 3000)
timers.add(function() {
console.log("timeout 4 fired, timers", timers.all());
}, 4000)
timers.add(function() {
console.log("timeout 5 fired");
}, 5000)
console.log('All timers', timers.all())
console.log("kill timer 2")
timers.stop(2)
Запустите фрагмент, чтобы увидеть его в действии.
Вам не нужен дикт, чтобы сопоставить индексы с буквами. Сама строка уже может быть проиндексирована по буквенным индексам. Вы должны перетасовать индексы вместо букв, чтобы можно было перебирать перетасованные индексы, чтобы разоблачить соответствующие буквы одну за другой:
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
Другое решение:
import random
word = 'administrator'
result = [[x, '_'] for x in word]
for i in result:
res = random.choice([x for x in result if x[1] == '_'])
index = result.index(res)
result[index][1] = result[index][0]
print(''.join([x[1] for x in result]))
Вывод:
____n________
____n___r____
____n_s_r____
____n_s_r__o_
____n_s_r__or
___in_s_r__or
a__in_s_r__or
a__in_str__or
ad_in_str__or
ad_in_stra_or
ad_inistra_or
ad_inistrator
administrator