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实现的百度站长自动URL提交小工具
Jun 27 Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 Python
python九九乘法表的实例
Sep 26 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
对Python _取log的几种方式小结
Jul 25 Python
python psutil监控进程实例
Dec 17 Python
Django 批量插入数据的实现方法
Jan 12 Python
python scatter函数用法实例详解
Feb 11 Python
Python3爬虫发送请求的知识点实例
Jul 30 Python
django数据模型中null和blank的区别说明
Sep 02 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
adodb与adodb_lite之比较
2006/12/31 PHP
PHP 一个页面执行时间类代码
2010/03/05 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
Django接收自定义http header过程详解
2019/08/23 Python
is_file和file_exists效率比较
2021/03/14 PHP
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
最美家庭活动方案
2014/08/31 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
安全生产标语口号
2015/12/26 职场文书
MySQL分区路径子分区再分区
2022/04/13 MySQL
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技