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创建xml的方法
Mar 10 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
python+pyqt5编写md5生成器
Mar 18 Python
python字符串的拼接方法总结
Nov 18 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 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
一个简洁的多级别论坛
2006/10/09 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
php实现微信支付之现金红包
2018/05/30 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
vue多次循环操作示例
2019/02/08 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
Python判断某个用户对某个文件的权限
2016/10/13 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python pymongo模块常用操作分析
2018/09/01 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
药学专业毕业生求职信
2013/10/20 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
毕业生党员个人总结
2015/02/14 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
JavaScript流程控制(循环)
2021/12/06 Javascript