使用Python random模块生成随机数据实例 (2)

密码安全的伪随机数生成器是一个随机数生成器,它具有的 特性使其适合 在数据安全至关重要的密码学应用使用

所有加密安全的随机生成器函数均返回随机字节。

此函数返回的随机字节取决于操作系统的随机源。随机性的质量取决于操作系统的随机性来源。

我们可以使用以下方法以加密方式保护Python中的随机生成器

秘密模块以固定随机数据

使用操作系统。urandom()

使用随机。SystemRandom

import random import secrets number = random.SystemRandom().random() print("secure number is ", number) print("Secure byte token", secrets.token_bytes(16)) 获取并设置随机发生器的状态

random模块具有两个函数getstatesetstate,这有助于我们捕获随机发生器的当前内部状态。使用此状态,我们可以生成相同的随机数或数据序列。

random.getstate()

该 getstate函数通过捕获随机生成器的当前内部状态来返回对象。我们可以将此状态传递给 setstate方法,以将该状态恢复为当前状态。

注意:通过将状态更改为上一个状态,我们可以再次获得相同的随机数据。例如,如果您想再次获得相同的样本项目,则可以使用这些功能。

random.setstate(状态)

该setstate() 函数将生成器的内部状态恢复为状态对象。即它再次应用相同的状态。可以通过调用该getstate函数来获取此状态对象 。

为什么要使用getstate和setstate函数

如果获得了先前的状态并将其还原,则可以一次又一次地再现相同的随机数据。请记住,您不能使用其他随机函数,也不能更改参数值。这样,您正在更改状态。

现在让我们看一下示例,以清楚地了解如何在Python中获取和设置随机生成器。

import random number_list = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30] print("First Sample is ", random.sample(number_list,k=5)) state = random.getstate() # store this current state in state object print("Second Sample is ", random.sample(number_list,k=5)) random.setstate(state) # restore state now using setstate print("Third Sample is ", random.sample(number_list,k=5)) #Now it will print the same second sample list random.setstate(state) # restore state now print("Fourth Sample is ", random.sample(number_list,k=5)) #again it will print the same second sample list again

如您在输出中看到的,由于重置了随机生成器,我们得到了相同的样本列表。

Numpy.random –数组的PRNG

PRNG是伪随机数生成器的首字母缩写。如您所知,使用Pythonrandom模块,我们可以生成标量随机数和数据。

每当您要生成随机数数组时,都需要使用numpy.random。

numpy提供了numpy.random具有多种功能软件包,可以为各种分布生成随机的n维数组

现在,让我们看一些例子。

生成一个随机的n维浮点数数组

使用numpy.random.rand()产生随机浮点数的在范围内的n维阵列[0.0,1.0)

使用 numpy.random.uniform产生随机浮点数的在[低的范围内的n维阵列中,高)

import numpy random_float_array = numpy.random.rand(2, 2) print("2 X 2 random float array in [0.0, 1.0] \n", random_float_array,"\n") random_float_array = numpy.random.uniform(25.5, 99.5, size=(3, 2)) print("3 X 2 random float array in range [25.5, 99.5] \n", random_float_array,"\n") 生成整数的随机n维数组

使用 numpy.random.random_integers()生成随机的n维整数数组。

import numpy random_integer_array = numpy.random.random_integers(1, 10, 5) print("1-dimensional random integer array \n", random_integer_array,"\n") random_integer_array = numpy.random.random_integers(1, 10, size=(3, 2)) print("2-dimensional random integer array \n", random_integer_array) 从数字或序列数组中选择随机元素

使用numpy.random.choice()生成随机样本。

使用此方法可以从n维数组中获取单个或多个随机数,无论替换与否。

现在来看示例。

import numpy array =[10, 20, 30, 40, 50, 20, 40] single_random_choice = numpy.random.choice(array, size=1) print("single random choice from 1-D array", single_random_choice) multiple_random_choice = numpy.random.choice(array, size=3, replace=False) print("multiple random choice from 1-D array without replacement ", multiple_random_choice) multiple_random_choice = numpy.random.choice(array, size=3, replace=True) print("multiple random choice from 1-D array with replacement ", multiple_random_choice)

我们将在后续文章中介绍其他numpy的随机包函数及其用法。

生成随机的通用唯一ID

Python UUID模块提供了不变的UUID对象。 UUID是通用唯一标识符。

它具有生成所有版本的UUID的功能。使用 uuid.uuid4()函数,您可以生成128位长的随机唯一ID广告,这种广告在 密码学上是安全的。

这些唯一的ID用于标识计算机系统中的文档,用户,资源或任何信息。

范例

import uuid # get a random UUID safeId = uuid.uuid4() print("safe unique id is ", safeId) 使用random模块的骰子游戏

我创建了一个简单的骰子游戏,以了解random模块的功能。在这个游戏中,我们有两个玩家和两个骰子。

每个玩家一个一个地洗牌,一个都洗牌。

该算法计算两个骰子数的总和,并将其添加到每个玩家的计分板上。

得分高的玩家是赢家

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyfgf.html