首页 > 编程语言 >[编程基础] Python随机数生成模块总结

[编程基础] Python随机数生成模块总结

时间:2022-12-17 20:03:26浏览次数:70  
标签:编程 val Python random 生成器 随机数 print


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

文章目录

  • ​​1 介绍​​
  • ​​1.1 随机数字生成器​​
  • ​​1.2 Python random 模块​​
  • ​​1.3随机种子​​
  • ​​2 使用​​
  • ​​2.1 Python random模块同一随机种子使用​​
  • ​​2.2 Python random.randint​​
  • ​​2.3 Python random.randrange​​
  • ​​2.4 Python random.uniform​​
  • ​​2.5 Python random.choice​​
  • ​​2.6 Python random.shuffle​​
  • ​​2.7 Python random.sample​​
  • ​​2.8 Python secrets 模块​​
  • ​​2.9 Python UUID模块​​
  • ​​3 参考​​

1 介绍

1.1 随机数字生成器

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

在计算中,随机生成器用于游戏、模拟或密码学。为了安全起见,必须使用加密安全的伪随机数生成器。为了提高伪随机数生成器的质量,操作系统使用从设备驱动程序、用户输入延迟或来自一个或多个硬件组件的抖动中收集的环境噪声。这是加密安全伪随机数生成器的核心。

1.2 Python random 模块

内置的Python random模块为各种分布实现伪随机数生成器。Python使用Mersenne Twister算法来生成伪随机数。这个模块安全性不高。对于安全相关的任务,推荐使用secrets模块。

1.3随机种子

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

2 使用

2.1 Python random模块同一随机种子使用

在下面的示例中,我们使用相同的种子。相同的种子值产生相同的伪随机值。

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())
0.36152277491407514
0.480480665601294
0.4169526266056648
********************************
0.36152277491407514
0.480480665601294
0.4169526266056648

2.2 Python random.randint

random.randint函数在值[x,y]之间生成整数。以下示例生成数字1到10之间的四个随机整数。

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)
5
6
3
10

2.3 Python random.randrange

random.randrange函数排除了右边的区间。它选择[x,y)之间的值。以下示例生成数字1到10之间的四个随机整数,其中排除了值10。

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)
5
1
4
5

2.4 Python random.uniform

random.uniform函数在值[x,y]之间生成随机浮点数。以下示例在数字1和10之间产生四个随机浮点数。

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.1833595562120247
2.3856384178156502
6.45443300907888
6.678603948997886

2.5 Python random.choice

该random.choice函数从非空序列返回一个随机元素。该示例从列表中随机抽取一个单词四次。

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)
falcon
falcon
forest
rock

2.6 Python random.shuffle

random.shuffle函数可以将序列打乱。以下示例将单词列表随机打乱两次。

import random


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


random.shuffle(words)
print(words)

random.shuffle(words)
print(words)
['sky', 'falcon', 'forest', 'rock', 'storm']
['storm', 'forest', 'falcon', 'sky', 'rock']

2.7 Python random.sample

random.sample允许从一个序列中随机抽取n个唯一元素。以下示例从单词列表中两次随机抽取三个元素。

import random


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


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

sample = random.sample(words, 3)
print(sample)
['storm', 'rock', 'forest']
['rock', 'falcon', 'storm']

2.8 Python secrets 模块

secrets模块用于生成适合管理密码、帐户身份验证或安全令牌等数据的强随机数。sercets模块中token_hex函数返回一个随机的十六进制文本字符串。token_urlsafe函数返回一个url安全的随机文本字符串。

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)
49a4c25d535581c0e1edaf71
_FHy1al7lB4fyVqU
JjLoiy7k

2.9 Python UUID模块

通用唯一标识符(Universally Unique Identifier)UUID是指一台机器上生成的数字,UUID是128位的全局唯一标志,通常由32字节的字符串表示。UUID由以下几部分组成:

  • 时间戳uuid1():根据时间或时钟序列生成字符串
  • 分布式计算uuid2():根据分布式计算环境DCE生成字符串
  • 机器识别号uuid3():根据MAC地址或者IP生成字符串,没有网卡则通过其他方式生成。
  • 随机数uuid4():自动随机生成一组序列字符串
  • 散列值uuid5(): 基于名字和SAHI值

python中uuid模块提供UUID类,UUID类中通过函数uuid1(), uuid3(), uuid4(), uuid5()来生成1, 3, 4, 5各个版本的UUID ( python中没有uuid2()这个函数,但是UUID标识符中有该指示实现,原因uuid2和uuid1类似,所以uuid2极少使用)。

import uuid

name = "test"

print(uuid.uuid1())
print(uuid.uuid3(uuid.NAMESPACE_DNS, name))
print(uuid.uuid4())
print(uuid.uuid5(uuid.NAMESPACE_DNS, name))
62ecaf30-b61a-11ea-ac5b-0a58ac13091e
45a113ac-c7f2-30b0-90a5-a399ab912716
109e9212-e837-4cd9-9e21-3b48aba373fa
4be0643f-1d98-573b-97cd-ca98a65347dd

uuid1可保证生成全球范围的唯一性字符. 但通过该方法生成的字符中包含有主机的网络地址, 可能危及隐私,根据实验的结果,产生的UUID后面几段的数字会完全一样。uuid4使用随机数来生成UUID但是伪随机数有较低的重复概率。uuid3和uuid5类似,都是通过计算命名空间和名字的SHA-1散列值来生成UUID。

在实际使用uuid1和uuid4较多,uuid3和uuid5更适合唯一性更高的场合。

3 参考

​http://zetcode.com/python/random-module/​

​https://www.jianshu.com/p/f99737713c1b​



标签:编程,val,Python,random,生成器,随机数,print
From: https://blog.51cto.com/luohenyueji/5950113

相关文章

  • [编程基础] Python格式化字符串常量f-string总结
    Python格式化字符串常量f-string总结本文主要总结在Python中如何使用格式化字符串常量f-string(Formattedstringliterals)。在Python程序中,大部分时间都是使用%s或fo......
  • Python+QT美颜工具源码
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 【Python】爬虫笔记-ConnectionResetError(10054)
    0x01在对网站图片进行批量爬取的过程中遇到了一个典型问题:requests.exceptions.ConnectionError:('Connectionaborted.',ConnectionResetError(10054,'Anexisting......
  • Python写个“点球大战”小游戏
    大家好,欢迎来到Crossin的编程教室!看过我Python入门教程的朋友应该会看到其中有提到一个点球小游戏的作业。在世界杯决赛即将到来之际,我们再来回顾一下这个小游戏。......
  • (数据科学学习手札147)Python GIS利器shapely全新2.0版本一览
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,我写过很多篇介绍geopandas相关技术的文章,而geop......
  • python给文章中手机号打马赛克效果
    python中re模块练习:#coding:utf-8importrecontent="""白日依1999988****山尽,黄河入454654213213213海流。欲穷12456123千里目,更上156475***41一层楼。"""patter......
  • python之路51 聚合查询 分组查询
    图书管理系统1.表设计先考虑普通字段再考虑外键字段数据库迁移、测试数据录入2.首页展示3.书籍展示4.书籍添加5.书籍编辑后端如何获取用户想要编辑的......
  • Python 面向对象
    目录​​python继承​​​​面向对象技术简介​​​​创建类​​​​self代表类的实例,而非类​​​​创建实例对象​​​​访问属性​​​​Python内置类属性​​​​python......
  • Python中open()文件操作/OS目录操作
    File对象测试数据的读写与操作#defopen(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True):#knownspecialcaseofo......
  • f-strings: Python字符串处理的瑞士军刀
    从3.6开始,Python新增了一个格式化字符串的方法,称之为f-string。其用法就是在python原始字符串的基础上增加f/F前缀,以大括号{}标明被替换的字段。f-string在本质......