@Sheud_z

Как не генерировать пароль который уже был в сгенерирован?

у меня есть вот такой код:
while True:
        is_first = False
        cs = random.randint(int(col1),int(col2))
        symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
        rand = (''.join(choice(symbols) for i in range(cs)))
        f = open(f'text.txt', 'a')
        f.write(f'{rand}\n')
        print(rand)


и мне нужно как то не генерировать пароль который записан в text.txt, и когда все варианты закончаться, например в text.txt запишуться все возможные варианты пароля программа остановиться

думаю уже долго но ничего толкового не придумал
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 3
во первых открывать заново файл не надо.
f = open(f'text.txt', 'a')
while True:
        is_first = False
        cs = random.randint(int(col1),int(col2))
        symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
        rand = (''.join(choice(symbols) for i in range(cs)))
        f.write(f'{rand}\n')
        print(rand)
f.close()

во вторых можно так:
f = open(f'text.txt', 'a')
while True:
        is_first = False
        cs = random.randint(int(col1),int(col2))
        symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
        rand = (''.join(choice(symbols) for i in range(cs)))
        if rand in f.read().splitlines():
            continue
        else:
            f.write(f'{rand}\n')
            print(rand)
Ответ написан
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Самое простое, чтобы сгенерированные случайные последовательности не повторялись - сложить их в set().
Например:
import random
def generate_random_massive(col1, col2, size):
    results = set()
    while len(results) < size:
        cs = random.randint(int(col1),int(col2))
        symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
        rand = (''.join(random.choice(symbols) for i in range(cs)))
        results.update({rand})
    return results

if __name__ == '__main__':
    col1 = 16
    col2 = 16
    size = 1000
    rands = generate_random_massive(col1, col2, size)
    print(rands)


Но называть это паролями и хранить в таком виде я бы не советовал…
Ответ написан
@o5a
Чтобы найти "все возможные пароли длины N без повторов" из набора символов можно сразу использовать itertools.product
from itertools import product

symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
result = list(product(symbols, repeat = N))

Выдаст список кортежей наборов букв каждого пароля, к ним можно применить ''.join() для полноценной строки.
Только учтите, что это большие объемы, т.к. кол-во возможных паролей будет определяться
len(symbols) в степени N
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы