开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python随机模块

Python随机模块教程展示了如何在Python中生成伪随机数。

随机数生成器

随机数生成器(RNG)生成一组值,这些值在外观上不显示任何可区分的模式。随机数发生器分为两类:硬件随机数发生器和伪随机数发生器。硬件随机数生成器被认为可以产生真正的随机数。伪随机数生成器根据软件算法生成值。它们产生看起来随机的值。但是这些值是确定性的并且可以重现,如果算法是已知的。

在计算中,随机生成器用于赌博、游戏、模拟或密码学。

为了提高伪随机数生成器的质量,操作系统使用从设备驱动程序、用户输入延迟或来自一个或多个硬件组件的抖动收集的环境噪声。这是加密安全伪随机数生成器的核心。

Python随机模块

内置的Pythonrandom模块实现了各种分布的伪随机数生成器。Python使用MersenneTwister算法来生成其伪随机数。此模块不适合安全性。对于与安全相关的任务,建议使用secrets模块。

种子

种子是初始化随机数生成器的值。随机数生成器通过对先前值执行某些操作来产生值。当算法开始时,种子是生成器运行的初始值。生成器最重要和最困难的部分是提供接近真正随机数的种子。

在Python中,种子值由random.seed函数提供。如果未明确给出该值,Python将使用系统时钟或其他随机源。

Python随机-相同的种子

在下面的例子中,我们使用相同的种子。

#!/usr/bin/python

import random


myseed = 16

random.seed(myseed)

print(random.random())
print(random.random())
print(random.random())

print('********************************')

random.seed(myseed)

print(random.random())
print(random.random())
print(random.random())

相同的种子值产生相同的伪随机值。

$ ./same_seed.py 
0.36152277491407514
0.480480665601294
0.4169526266056648
********************************
0.36152277491407514
0.480480665601294
0.4169526266056648

Python随机.randint

random.randint函数生成值[x,y]之间的整数。

#!/usr/bin/python

import random


val = random.randint(1, 10)
print(val)

val = random.randint(1, 10)
print(val)

val = random.randint(1, 10)
print(val)

val = random.randint(1, 10)
print(val)

该示例生成数字1和10之间的四个随机整数。

$ ./rand_int.py 
10
4
9
3

这是一个示例输出。

Python随机.randrange

random.randrange函数排除了区间的右侧。它选择[x,y]之间的值。

#!/usr/bin/python

import random


val = random.randrange(1, 10)
print(val)

val = random.randrange(1, 10)
print(val)

val = random.randrange(1, 10)
print(val)

val = random.randrange(1, 10)
print(val)

该示例生成介于数字1和10之间的四个随机整数,其中值10被排除在外。

Python随机统一

random.uniform函数生成值[x,y]之间的随机浮点数。

#!/usr/bin/python

import random


val = random.uniform(1, 10)
print(val)

val = random.uniform(1, 10)
print(val)

val = random.uniform(1, 10)
print(val)

val = random.uniform(1, 10)
print(val)

该示例在数字1和10之间生成四个随机浮点数。

$ ./floats.py 
9.594596536362012
5.832673168195081
6.7942727933257
7.035310921661894

这是一个示例输出。

Python随机选择

random.choice函数从非空序列中返回一个随机元素。

#!/usr/bin/python

import random


words = ['sky', 'storm', 'rock', 'falcon', 'forest']


val = random.choice(words)
print(val)

val = random.choice(words)
print(val)

val = random.choice(words)
print(val)

val = random.choice(words)
print(val)

该示例从列表中随机选择一个单词四次。

$ ./rand_choice.py 
forest
forest
sky
storm

这是一个示例输出。

Python随机播放

random.shuffle函数将序列打乱。

#!/usr/bin/python

import random


words = ['sky', 'storm', 'rock', 'falcon', 'forest']


random.shuffle(words)
print(words)

random.shuffle(words)
print(words)

该示例将单词列表打乱两次。

$ ./shuffling.py 
['storm', 'falcon', 'rock', 'sky', 'forest']
['falcon', 'storm', 'rock', 'forest', 'sky']

这是一个示例输出。

Python随机样本

random.sample允许从序列中选择n个唯一元素的随机样本。

#!/usr/bin/python

import random


words = ['sky', 'storm', 'rock', 'falcon', 'forest']


sample = random.sample(words, 3)
print(sample)

sample = random.sample(words, 3)
print(sample)

该示例从单词列表中随机选择三个元素两次。

$ ./sampling.py 
['rock', 'storm', 'falcon']
['forest', 'sky', 'rock']

这是一个示例输出。

Python的秘密

secrets模块用于生成适合管理数据(例如密码、帐户身份验证或安全令牌)的加密强随机数。

#!/usr/bin/python

import secrets
import string


print(secrets.token_hex(12))
print(secrets.token_urlsafe(12))

alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(8))

print(password)

token_hex函数返回一个随机的十六进制文本字符串。token_urlsafe函数返回一个随机的URL安全文本字符串。

alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(8))

这里我们生成一个八字符的字母数字密码。

$ ./strong.py 
69e6919fc04cbd6f9f5a25dc
eLL8-yT4cictksh8
YbpPzXvt

这是一个示例输出。

在本教程中,我们使用了Pythonrandom模块。

列出所有Python教程。

未经允许不得转载:我爱分享网 » Python随机模块

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏