old_montyчтото мне подсказывает что к-во вариантов будет больше с учетом того что в английском алфавите 26 букв. Всего будет 26**6 вариантов, в данном конкретном случае.
Всего будет 6! = 720
Задача у ТС описана крайне расплывчато. Мы должны генерировать новое слово и если оно не совпало заново генерировать все слово? Или мы генерируем слово сравниваем какие символы совпали и больше их не генерируем?
В первом случае можно просто генерировать случайное сочетание букв пока не совпадет.
import random chars = 'abcdefghijklmnopqrstuvwxyz' pattern = 'python' sample = '' while sample != pattern: gen = [random.choice(chars) for char in pattern] sample = ''.join(gen) print(sample) print('word generated:', sample)
Метод имеет существенный минус, нету гарантированого времени когда слово сгенерируеться.
Все зависит от рандома, в теории можно бесконечно долго ждать когда выпадет нужная комбинация букв и так и не дождаться.
Поэтому более подходящий метод эт брутфорс, тут нужна рекурсия.
def gen(pattern, sample): chars = 'abcdefghijklmnopqrstuvwxyz' for char in chars: result = sample+char print(result) if len(pattern) > len(result): result = gen(pattern, result) if pattern == result: return result else: continue pattern = 'python' sample = '' sample = gen(pattern, sample) print('word generated:', sample)
НО зато мы гарантировано знаем что при запасе времени достаточом для перебора всех вариантов мы гарантировано получим результат.
если мы ищем ‘abc’ то результат достаточно быстрый:
>>>
a
aa
aaa
.........
aaz
ab
aba
abb
abc
word generated: abc
>>>
Это если без всяикиз итертулзов.
на итертулзе этот же алгоритм:
import itertools patern = 'python' chars = 'abcdefghijklmnopqrstuvwxyz' for sample in itertools.combinations_with_replacement(chars, len(patern)): print(''.join(sample)) if ''.join(sample) == patern: break print('word generated:', ''.join(sample))
Во втором же случае(когда генерируем посимвольно пока символ не совпадет) скорость возрастает просто до мгновенной .
можно использовать рандом:
import random chars = 'abcdefghijklmnopqrstuvwxyz' pattern = 'python' gen = ['' for char in pattern] sample = '' while sample != pattern: for i, char in enumerate(pattern): if (gen[i] != char) : gen[i] = random.choice(chars) sample = ''.join(gen) print(sample) print('word generated:', sample)
А можно просто перебор по порядку.
chars = 'abcdefghijklmnopqrstuvwxyz' pattern = 'python' sample = '' for pat in pattern: for char in chars: print(sample+char) if char == pat: sample = sample+char print('word generated:', sample)