Генерация случайных семян в Python - PullRequest
1 голос
/ 20 октября 2019

Есть ли способ генерировать случайные семена? примерно так:

def random_seed(length)

пример вывода:

3273650411015667511766

или есть способ сделать как цифры, так и буквы? пример вывода:

ryf65s4d4s6df54s6y4fs6f5b4y6s4fy

Ответы [ 3 ]

1 голос
/ 20 октября 2019

Для целых чисел:

import random 

def random_seed(length):
    random.seed()
    min = 10**(length-1)
    max = 9*min + (min-1)
    return random.randint(min, max)

Для строк наивный подход может быть следующим:

import random

choices = '0123456789abcdefghijklmnopqrstuvwxyz'

def random_char(pos):
   return random.choice(choices)

def random_seed(length):
  l = [None]*length
  random.seed()
  return "".join(list(map(random_char, l)))

Осторожно, это не должно использоваться в целях безопасности вместо этого вы должны полагаться на os.urandom.

1 голос
/ 20 октября 2019

Вы можете использовать os.urandom. Это позволит вам указать количество случайных байтов, которые вы хотите сгенерировать. Конечно, вы можете конвертировать / интерпретировать эти байты как вам угодно (целые числа, символы, ...). Например:

>>> import os
>>> os.urandom(16)
b'-\xca(\xd2\xf7 \xe3:\x8fj\x19#\xe0-\xb8X'

os.urandom будет использовать источник случайности ОС (например, значения датчика и т. Д.). Если вы вызовете random.seed() без аргументов, это также приведет к откату случайности ОС, если она доступна, в противном случае - текущее системное время.

Возможные способы интерпретации байтов:

>>> int.from_bytes(os.urandom(16), 'big')
305697826269747251034239012950993064203
1 голос
/ 20 октября 2019

это похоже на работу;

import random
length=random.randint(1,30)
chars=[char for char in '0123456789abcdefghijklmnopqrstuvwxyz']
print(chars)
seed=''
for i in range(length): seed=seed+random.choice(chars)
print(seed)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...