python随机种子数_Python获得随机颜色,给定种子数的速度尽可能快

你没有提到number的范围。它必须是非负整数,否则bytes(number)将失败。(顺便说一句,该函数返回一个由number个零字节组成的bytes字符串,如果number很大,它将占用大量的RAM)。我假设number至少是24位来覆盖24位RGB颜色空间。在

为此目的使用加密哈希函数是过分的。因此,hashlib函数非常快,因为它们是用C语言编写的。我们可以使用内置的函数,但是对于机器大小的整数,hash(n)只返回{},所以我们需要做类似hash((n, n))的操作来获得随机输出。然而,做这种事情的结果并不是特别随机的:hash是为哈希表工作而设计的,而不是我们这里想要的那种置乱。在

为了生成随机的RGB值,我采用了Yann Collet的xxHash的混合算法。您可以在xxhash.c source code中查看该算法的C源代码。该算法速度相当快,具有良好的avalanching。Bret Mulvey写了一篇很好的关于hash mixing functions and the avalanche effect的介绍性文章。在def id_to_random_color(n):

n = ((n ^ n >> 15) * 2246822519) & 0xffffffff

n = ((n ^ n >> 13) * 3266489917) & 0xffffffff

n = (n ^ n >> 16) >> 8

return [u / 255. for u in n.to_bytes(3, 'big')] + [1.0]

此函数适用于range(2**24)中的n,事实上,它的结果在整个range(2**32)中是相当好的;它仍将在该范围之外给出有用的结果。为了在这里测试它,我将使用一个简化的版本,它将RGB值作为整数返回。第一个测试只显示n中n的RGB值。第二个测试生成25600个随机数并找到相应的RGB值。每个R、G和B值应该可以得到大约100次点击。在

^{pr2}$

输出0: 00 00 00

1: 60 6d 18

2: 4e f2 bf

3: 75 4f 48

4: 60 98 f1

5: 17 1d 98

6: 3b 69 13

7: aa 10 98

8: c1 31 e3

9: 1e fa 4a

10: 7f 05 b2

11: 86 0e b3

12: 39 84 c6

13: c1 75 4f

14: e2 38 87

15: db 54 79

16: 45 14 b6

17: cb 56 68

18: 8e bf d8

19: cd 50 3f

计数器输出r [74, 75, 75, 77, 78, 80, 80, 80, 80, 81, 82, 83, 84, 85, 85, 85, 86, 86, 86, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 111, 112, 112, 112, 112, 112, 113, 113, 113, 114, 114, 115, 115, 115, 115, 116, 116, 116, 116, 118, 119, 120, 123, 124, 126, 128, 138]

g [73, 74, 74, 77, 78, 79, 79, 81, 81, 82, 82, 83, 83, 83, 84, 84, 84, 84, 85, 85, 85, 86, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 115, 115, 116, 117, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 121, 121, 121, 123, 125, 126, 128]

b [73, 74, 77, 78, 78, 79, 80, 80, 80, 81, 82, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 87, 87, 87, 87, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 111, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 117, 118, 119, 120, 120, 122, 124, 126, 127, 128, 131]

您可能会注意到,id_to_RGB对于一个零输入返回所有的零。如果这是不需要的,您可以在开始处添加一个额外的混合步骤(也借用了xxHash)。在def id_to_RGB(n):

n = (374761397 + n * 3266489917) & 0xffffffff

n = ((n ^ n >> 15) * 2246822519) & 0xffffffff

n = ((n ^ n >> 13) * 3266489917) & 0xffffffff

n = (n ^ n >> 16) >> 8

return tuple(n.to_bytes(3, 'big'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是用中文回复: 首先,我们需要一个随机生成器,它可以根据给定的种子生成随机。在Python中,我们可以使用random模块中的randint函来生成指定范围内的整。 接下来,我们可以使用一个循环来生成10个随机,并将它们添加到一个列表中。具体的代码如下: import random random.seed(10) # 设置随机种子为10 nums = [] # 创建一个空列表 for i in range(10): num = random.randint(1, 100) # 生成1到100之间的随机 nums.append(num) # 将随机添加到列表中 print(nums) # 输出列表中的随机 运行上述代码,就可以得到10个100以内的随机,并将它们添加到一个列表中。 ### 回答2: 现在我们要实现的是随机产生10个100以内的整,并且把这10个添加到一个列表中。这个题目中给定了一个随机种子,也就是说,我们可以通过这个随机种子来保证每次运行时都可以得到相同的随机序列。 为了实现这个功能,我们需要使用Python中的random模块。这个模块提供了多种随机生成函,其中常用的有randint()函。这个函可以随机生成一个指定范围内的整,我们可以利用它来产生10个100以内的整。 首先,我们需要导入random模块: ``` import random ``` 然后,我们需要设置随机种子。根据题目中的要求,随机种子是10: ``` random.seed(10) ``` 接下来,我们需要定义一个列表,用来承载产生的10个随机: ``` nums = [] ``` 现在我们可以开始随机产生整。我们可以使用for循环语句来生成10个随机,并使用append()函将它们添加到列表中: ``` for i in range(10): num = random.randint(1, 100) nums.append(num) ``` 最后,我们可以将得到的随机列表输出来,检查一下是否正确: ``` print(nums) ``` 完整的代码如下: ``` import random random.seed(10) nums = [] for i in range(10): num = random.randint(1, 100) nums.append(num) print(nums) ``` 运行代码,我们可以得到如下输出: ``` [74, 5, 55, 62, 44, 19, 43, 7, 46, 47] ``` 可以看到,我们成功地按照要求产生了10个100以内的随机,并将它们添加到了一个列表中。 ### 回答3: 本题要求我们用随机生成器生成十个100以内的整,并将这些字添加到一个列表中。我们可以使用Python中的random模块来实现这个过程。 首先,我们需要导入random模块。在Python中,我们可以使用import语句来导入模块。代码如下: ```python import random ``` 接下来,我们需要设置随机种子。在Python中,我们可以使用random.seed()函来设置随机种子。代码如下: ```python random.seed(10) ``` 这里我们将随机种子设置为10。 然后,我们可以使用random.randint(a, b)函来生成一个随机,其中a和b分别是整的下限和上限。在本题中,我们需要生成十个100以内的整。代码如下: ```python numbers = [] for i in range(10): number = random.randint(0, 100) numbers.append(number) ``` 这里我们使用一个for循环来生成十个100以内的整,并将它们添加到一个名为numbers的空列表中。循环中的每一次迭代,我们使用random.randint(0, 100)来生成一个随机,并将它赋值给变量number。然后,我们将number添加到numbers列表中。 最后,我们可以使用print语句来输出这个列表。代码如下: ```python print(numbers) ``` 这里我们使用print(numbers)语句输出生成的十个随机。 整体代码如下: ```python import random random.seed(10) numbers = [] for i in range(10): number = random.randint(0, 100) numbers.append(number) print(numbers) ``` 以上就是本题的解题思路和代码实现过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值