不导入“随机”的随机整数

新手上路,请多包涵

有没有办法让程序在不导入 random 的情况下选择 1 到 1,000 之间的随机数?

原文由 user3353391 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 414
1 个回答

基于 random 源代码

 def randint(a, b):
    "Return random integer in range [a, b], including both end points."
    return a + randbelow(b - a + 1)

def randbelow(n):
    "Return a random int in the range [0,n).  Raises ValueError if n<=0."
    if n <= 0:
       raise ValueError
    k = n.bit_length()
    numbytes = (k + 7) // 8
    while True:
        r = int.from_bytes(random_bytes(numbytes), 'big')
        r >>= numbytes * 8 - k
        if r < n:
            return r

def random_bytes(n):
    "Return n random bytes"
    with open('/dev/urandom', 'rb') as file:
        return file.read(n)

例子:

 print(randint(1, 1000))

您还可以 使用 PRNG 实施 random_bytes()

原文由 jfs 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题