目录

一、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省略,则初始随机种子默认为当前系统时间。

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



python中random包 random python_python

图2-1

random()

功能:产生随机浮点数

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

参数:无

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



python中random包 random python_python_02

图2-2

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

表3-1 扩展随机数函数

扩展随机数函数

说明

randint(a, b)

功能:产生随机整数

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

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

           b——随机数范围的上限

说明:



python中random包 random python_python中random包_03

图3-1

 randrange(m, n[, k])

功能:产生随机整数

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

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

           n——随机数范围的上限

           k——随机数取值的步长

说明:



python中random包 random python_浮点数_04

图3-2

uniform(a, b)

功能:产生随机浮点数

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

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

           b——随机数范围的上限

说明:



python中random包 random python_浮点数_05

图3-3

getrandbits(k)

功能:产生随机整数

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

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

说明:



python中random包 random python_随机数_06

图3-4

choice(seq)

功能:选择随机元素

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

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

说明:



python中random包 random python_python中random包_07

图3-5

shuffle(seq)

功能:随机排序

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

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

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



python中random包 random python_随机数_08

图3-6

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

4.1 公式近似计算

圆周率的近似计算公式:

python中random包 random python_python_09

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中random包 random python_浮点数_10

图4-1

向单位正方形中随机撒点,撒点的总个数记为M,落在单位圆中点的个数记为N(N<M)。N与M的比值近似为圆周率。

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))