【问题标题】:Generate Random Seed In Python在 Python 中生成随机种子
【发布时间】:2020-02-16 11:52:01
【问题描述】:

有没有办法生成随机种子?像这样:

def random_seed(length)

输出示例:

3273650411015667511766

或者有没有办法同时做数字和字母? 输出示例:

ryf65s4d4s6df54s6y4fs6f5b4y6s4fy

【问题讨论】:

  • Random hash in Python的可能重复
  • “种子”是什么意思?看起来你想问的不是你要问的。
  • @PedroRodrigues 虽然这个问题的表述很糟糕,但据我了解,他似乎想要随机整数和字符串,所以并不是该问题的真正副本。
  • @RMPR 该问题的答案中有大量不同的哈希值。例如,This one 看起来与 OP 要求的预期输出非常相似。我猜你的意思是随机的ints 和strings 在输出中。我错过了什么?
  • OP,如果您不知道,“种子”通常指的是 RNG 的 输入。对于某些 RNG 实现,可以从现有 RNG 中提取种子。 Python 的默认 RNG 是一个 mersenne twister,如果您尝试使用人类大小的种子,它会出现一些尴尬的问题。像 PCG 这样的其他 RNG 在很多方面都更好(只要你不做加密)。

标签: python python-3.x random-seed


【解决方案1】:

您可以使用os.urandom。它让您指定要生成的随机字节数。当然,您可以将这些字节转换/解释为您喜欢的任何内容(整数、字符、...)。例如:

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

os.urandom将使用OS的随机性源(如传感器值等)。如果在没有参数的情况下调用random.seed(),则它还可以在可用的情况下回退OS随机性,否则当前系统时间。

解释字节的可能方法:

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

【讨论】:

  • 需要额外处理还是我遗漏了什么?
  • @ rmpr当然它取决于用户如何解释这些字节(作为数字,字符,......)。 span>
【解决方案2】:

这似乎有效;

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)

【讨论】:

    【解决方案3】:

    对于整数:

    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

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多