Python random库的使用

【中国大学MOOC】北京理工大学 python程序与设计课程
伪随机数:采用梅森旋转算法生成的伪随机序列中元素

一、基本随机函数

随机数需要一个种子,依据这个种子通过梅森旋转算法产生固定序列的随机数。
seed(a=None) 初始化给定的随机数种子,默认为当前系统时间

>>> import random

>>> random.seed(5)
>>> random.random()
0.6229016948897019
>>> random.random()
0.7417869892607294

使用seed主要是在某些系统各种,根据这个随机种子,可以复现问题,如果不使用种子,则默认为当前系统的精度很大的时间,这个无法再重现。

二、扩展随机函数

randint(a,b) 生成一个[a,b]之间的整数
randrange(m,n[,k]) 生成一个[m,n)之间以k为步长的随机整数
getrandbits(k) 生成一个k比特长的随机整数
uniform(a,b) 生成一个[a,b]之间的随机小数
choice(seq) 从序列seq中随机选择一个元素
shuffle(seq) 将序列seq中元素随机排列,返回打乱后的序列

>>> import random

>>> random.randint(0,100)
41

>>> random.randrange(0,100,10)
70

>>> random.uniform(0,100)
8.767153215604262

>>> random.getrandbits(16)
2969

>>> random.choice([1,2,3,4,5,6,7])
5

>>> s=[1,2,3,4,5,6,7]
>>> random.shuffle(s)
>>> s
[3, 7, 2, 5, 4, 6, 1]

三、圆周率计算问题

1.公式法

π
这是一个迭代过程,直接附代码了

>>> pi = 0
>>> N = 100
>>> for k in range(N):
	pi += 1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))
>>> print('圆周率值是:{}'.format(pi))
圆周率值是:3.141592653589793
2.随机投点法(蒙特卡洛算法)

蒙特卡罗方法是指随机的在这个圆所在的正方形中撒粒子,然后计算圆中粒子的个数,依次来计算圆的面积或圆周率。
π

#getPi.py
from random import random
from time import perf_counter

#投的点数
DARTS = 1000*1000
#投中的个数
hits = 0.0
start=perf_counter()
for i in range(1,DARTS):
    #随机得到一个坐标
     x, y = random(),random()
    #判断掷入的这个点在不在在圆内
     if x**2 + y**2 <= 1:
           hits += 1

pi = 4 *(hits/DARTS)
print("圆周率是:{}".format(pi))
print("运行时间为:{:.5f}s".format(perf_counter() - start))

随机测试结果:

>>> 圆周率是:3.140492
>>> 运行时间为:0.68017s

>>> 圆周率是:3.141032
>>> 运行时间为:0.67808s

>>> 圆周率是:3.145564
>>> 运行时间为:0.65829s

PDF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值