Python初学8——random库简介与使用

目录

一、random库基本介绍

二、基本随机数函数( seed()、random() )

三、扩展随机数函数( randint()、getrandbits()、uniform()、randrange()、choice()、shuffle() )

四、“圆周率的计算”实例

4.1 公式近似计算

4.2 蒙特卡罗方法


一、random库基本介绍

     1. random库是Python的标准库,可以用关键字 import 直接引用。random库用于产生随机数。(计算机采用梅森旋转算法生成伪随机数序列)

     2. 基本随机函数:seed()、random()

     3. 扩展随机函数:randint()、getrandbits()、uniform()、randrange()、choice()、shuffle()

二、基本随机数函数( seed()、random() )

相关概念:随机数种子。给定随机数种子——>梅森旋转算法——>随机序列(相同的随机种子,产生一模一样的随机序列)

表2-1 基本随机函数
基本随机函数 说明
seed(a)

功能:产生确定的初始随机种子

返回值:无

参数:a——指定的初始随机种子

说明:若a省略,则初始随机种子默认为当前系统时间。

           若人工设置初始随机种子,则程序运行可复现;若省略参数,则认为程序运行不可复现

图2-1
random()

功能:产生随机浮点数

返回值:[0.0, 1.0)之间的随即浮点数

参数:无

说明:该函数产生的随机数一定与随机种子有关

Python初学8——random库简介与使用_第1张图片 图2-2

三、扩展随机数函数( randint()、getrandbits()、uniform()、randrange()、choice()、shuffle() )

表3-1 扩展随机数函数
扩展随机数函数 说明
randint(a, b)

功能:产生随机整数

返回值:[a, b)之间的随机整数

参数:a——随机数范围的下限

           b——随机数范围的上限

说明:

Python初学8——random库简介与使用_第2张图片 图3-1

 randrange(m, n[, k])

功能:产生随机整数

返回值:[m, n)之间以k为步长的随机整数

参数:m——随机数范围的下限

           n——随机数范围的上限

           k——随机数取值的步长

说明:

图3-2
uniform(a, b)

功能:产生随机浮点数

返回值:[a, b]之间的随机浮点数

参数:a——随机数范围的下限

           b——随机数范围的上限

说明:

图3-3
getrandbits(k)

功能:产生随机整数

返回值:k比特长的随机整数

参数:k——随机数的长度

说明:

图3-4
choice(seq)

功能:选择随机元素

返回值:列表seq中的随机一个元素

参数:seq——提供可供随机选择的一个元素列表

说明:

图3-5
shuffle(seq)

功能:随机排序

返回值:序列seq的随机排列

参数:seq——提供可供随机排序的一个元素列表

说明:该函数的输出会覆盖原列表。

Python初学8——random库简介与使用_第3张图片 图3-6

四、“圆周率的计算”实例

4.1 公式近似计算

圆周率的近似计算公式:

\pi = \sum_{k=0}^{\infty }\left [ \frac{1}{16^{k}} \left ( \frac{4}{8k+1}-\frac{2}{8k+4}-\frac{1}{8k+5}-\frac{1}{8k+6} \right ) \right ]

pi = 0      # 设 π 的初始值为0
N = 100     # 定义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))

4.2 蒙特卡罗方法

蒙特卡罗方法:

Python初学8——random库简介与使用_第4张图片 图4-1

向单位正方形中随机撒点,撒点的总个数记为M,落在单位圆中点的个数记为N(N

import random as r      # 引用random库,用于随机撒点
import time as t        # 引用time库,用于计时计算时间
stars = 10000 * 10000   # 设置撒点总数为一亿个
hits = 0                # 设置落在单位圆中点数的初始个数为零个
start = t.perf_counter()            # 计算开始
for k in range(stars):
    x, y = r.random(), r.random()   # 随机撒点:0≤x<1,0≤y<1
    if (pow(x,2) + pow(y,2)) < 1 :  # 判断该次撒的点是否的单位圆中
        hits += 1
pi = 4 * (hits / stars)             # 近似计算圆周率
print("计算用时{}s".format(t.perf_counter() - start))   # 计算结束
print("圆周率近似为:{}".format(pi))

 

你可能感兴趣的:(Python,python)