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

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

时间:2022-12-18 23:35:05浏览次数:75  
标签:10 编程 val Python random 生成器 随机数 print

date: 2020-06-24 21:05:32 +0800
tags:
  - 编程基础
  - Python

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

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

https://www.cnblogs.com/iamjianghao/p/10764525.html

标签:10,编程,val,Python,random,生成器,随机数,print
From: https://www.cnblogs.com/luohenyueji/p/16991260.html

相关文章

  • python---基础部分---六种标准数据类型
    注意:    基本数据类型:python中一切都是对象(class)一、六种标准数据类型:  一、NUmber类型:       整形,浮点型,复数类型,布尔型,所有数据类型都是以类形......
  • [编程基础] Python中args和kwargs参数的使用
    date:2020-10-1421:04:20+0800tags:-编程基础-Python本文主要介绍Python中*args和**kwargs参数的使用1使用在Python中,定义函数时可以使用两个特殊符号,以......
  • python调go dll库构造函数方法
    调用方法最主要的是 fromctypesimport* 里面包含了windll调用加载方法,具体用windll还是cdll加载动态库见百度接下来就是classGoString(Structure):_fields_=[(......
  • 桌面应用自动化python——uiautomation API 如何找元素
       本文主要用到一个uiautomation的开源框架,是一个咱们中国人写的,支持MFC,WindowsForms,WPF,Metro,Qt界面;此文主要是自己的个人总结,开源作者原文:gethub地址:https://g......
  • Python 资源大全中文版
    我想很多程序员应该记得GitHub上有一个Awesome-XXX系列的资源整理。​​awesome-python​​ 是vinta发起维护的Python资源列表,内容包括:Web框架、网络爬虫、网络......
  • excel文件读写操作python
    #-*-coding:utf8-*-fromos.pathimportjoinfromxlrdimportopen_workbookfromxlutils.copyimportcopyimportos,sysclassReadAndWriteExcel:def__init__(sel......
  • Python进行自动化测试综合介绍
    目前大家对​​Python​​都有一个共识,就是他对​​测试​​非常有用,自动化测试里Python用途也很广,但是Python到底怎么进行自动化测试呢?今天就简单的向大家介绍一下怎么使用......
  • Python调用windows下DLL详解 - ctypes库的使用
    在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互。使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详细的讲......
  • [python]《Python编程快速上手让繁琐工作自动化》学习笔记7
    date:2019-08-0216:24:19+0800tags:-Python1.用GUI自动化控制键盘和鼠标第18章(代码下载)pyautogui模块可以向Windows、OSX和Linux发送虚拟按键和鼠......
  • [python]《Python编程快速上手让繁琐工作自动化》学习笔记6
    date:2019-07-3118:51:36+0800tags:-Python1.发送电子邮件和短信笔记(第16章)(代码下载)1.1发送电子邮件简单邮件传输协议(SMTP)是用于发送电子邮件的协议。......