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教程。