если мы немного изменим код, мы увидим, почему это никогда не заканчивается. Я начинаю с вытягивания части внутреннего цикла while
в функцию, которая генерирует все возможные значения:
def option_gen(n):
for i in range(2, n):
s = str(i)
if '0' in s or '1' in s:
continue
yield s
options = list(option_gen(len(alfabeto)))
, которая имеет 160 значений, и, как заметил Томерику, это намного меньше, чем 351 значение в вашемсписок. следовательно, ваш цикл while будет вращаться через некоторое время, добавляя новые значения в постоянно растущую строку cond_1
, тогда просто ничего не делая.
мы можем использовать эту функцию, чтобы написать более эффективную версию, которая вместо этого дает гораздо более быстрый сбойвместо того, чтобы расходиться:
from random import shuffle
random.shuffle(options)
result = []
for _ in range(len(alfabeto)+3):
cont = '0'.join(list(options.pop()))
result.append(cont + '1')
numeri = ''.join(result)
через некоторое время это вызовет полезное исключение, объясняющее, почему он не может продвигаться вперед. Также обратите внимание, что выполнение цикла for
только над чем-то вроде range(5)
завершит