Python标准库之随机数 (math包、random包)介绍


Posted in Python onNovember 25, 2014

我们已经在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考虑选择标准库之外的numpy和scipy项目,它们不但支持数组和矩阵运算,还有丰富的数学和物理方程可供使用。

此外,random包可以用来生成随机数。随机数不仅可以用于数学用途,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。

math包

math包主要处理数学相关的运算。math包定义了两个常数:

math.e   # 自然常数e

math.pi  # 圆周率pi

此外,math包还有各种运算函数 (下面函数的功能可以参考数学手册):

math.ceil(x)       # 对x向上取整,比如x=1.2,返回2

math.floor(x)      # 对x向下取整,比如x=1.2,返回1

math.pow(x,y)      # 指数运算,得到x的y次方

math.log(x)        # 对数,默认基底为e。可以使用base参数,来改变对数的基地。比如math.log(100,base=10)

math.sqrt(x)       # 平方根

三角函数: math.sin(x), math.cos(x), math.tan(x), math.asin(x), math.acos(x), math.atan(x)

这些函数都接收一个弧度(radian)为单位的x作为参数。

角度和弧度互换: math.degrees(x), math.radians(x)

双曲函数: math.sinh(x), math.cosh(x), math.tanh(x), math.asinh(x), math.acosh(x), math.atanh(x)

特殊函数: math.erf(x), math.gamma(x)

random包

如果你已经了解伪随机数(psudo-random number)的原理,那么你可以使用如下:

random.seed(x)

来改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。

1) 随机挑选和排序

random.choice(seq)   # 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
random.sample(seq,k) # 从序列中随机挑选k个元素
random.shuffle(seq)  # 将序列的所有元素随机排序

2)随机生成实数

下面生成的实数符合均匀分布(uniform distribution),意味着某个范围内的每个数字出现的概率相等:

random.random()          # 随机生成下一个实数,它在[0,1)范围内。

random.uniform(a,b)      # 随机生成下一个实数,它在[a,b]范围内。

下面生成的实数符合其它的分布 (你可以参考一些统计方面的书籍来了解这些分布):

random.gauss(mu,sigma)    # 随机生成符合高斯分布的随机数,mu,sigma为高斯分布的两个参数。 

random.expovariate(lambd) # 随机生成符合指数分布的随机数,lambd为指数分布的参数。

此外还有对数分布,正态分布,Pareto分布,Weibull分布,可参考下面链接:

http://docs.python.org/library/random.html

假设我们有一群人参加舞蹈比赛,为了公平起见,我们要随机排列他们的出场顺序。我们下面利用random包实现:

import random

all_people = ['Tom', 'Vivian', 'Paul', 'Liya', 'Manu', 'Daniel', 'Shawn']

random.shuffle(all_people)

for i,name in enumerate(all_people):

    print(i,':'+name)

练习

设计下面两种彩票号码生成器:

1. 从1到22中随机抽取5个整数 (这5个数字不重复)

2. 随机产生一个8位数字,每位数字都可以是1到6中的任意一个整数。

总结

math.floor(), math.sqrt(), math.sin(), math.degrees()

random.random(), random.choice(), random.shuffle()

Python 相关文章推荐
Python操作MongoDB数据库PyMongo库使用方法
Apr 27 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
python 异常处理总结
Oct 18 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
python @classmethod 的使用场合详解
Aug 23 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Python批量启动多线程代码实例
Feb 18 Python
python datetime处理时间小结
Apr 16 Python
Python sublime安装及配置过程详解
Jun 29 Python
python如何用matplotlib创建三维图表
Jan 26 Python
Python标准库之循环器(itertools)介绍
Nov 25 #Python
Python标准库之sqlite3使用实例
Nov 25 #Python
Python标准库内置函数complex介绍
Nov 25 #Python
Python XML RPC服务器端和客户端实例
Nov 22 #Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 #Python
python进程类subprocess的一些操作方法例子
Nov 22 #Python
Python读取环境变量的方法和自定义类分享
Nov 22 #Python
You might like
新52大事件
2020/03/03 欧美动漫
德劲1104的电路分析与改良
2021/03/01 无线电
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
php实现微信发红包
2015/12/05 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Python三元运算实现方法
2015/01/12 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
代码分析Python地图坐标转换
2018/02/08 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
python日期相关操作实例小结
2019/06/24 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
python带参数打包exe及调用方式
2019/12/21 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
趣味运动会通讯稿
2015/07/18 职场文书