簡體   English   中英

在 Python 中生成隨機種子

[英]Generate Random Seed In Python

有沒有辦法生成隨機種子? 像這樣的東西:

def random_seed(length)

output 示例:

3273650411015667511766

或者有沒有辦法同時做數字和字母? output 示例:

ryf65s4d4s6df54s6y4fs6f5b4y6s4fy

這似乎有效;

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)

對於整數:

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

您可以使用os.urandom 它讓您指定要生成的隨機字節數。 當然,您可以將這些字節轉換/解釋為您喜歡的任何內容(整數、字符、...)。 例如:

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

os.urandom將使用操作系統的隨機源(例如傳感器值等)。 如果您在沒有 arguments 的情況下調用random.seed() ,它也會回退到操作系統隨機性(如果可用),否則是當前系統時間。

解釋字節的可能方法:

>>> int.from_bytes(os.urandom(16), 'big')
305697826269747251034239012950993064203

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM