math库:
random库:
seed(x) -> 给随机数一个种子值,默认随机种子是系统时钟
random() -> 生成一个[0,1.0]之间的随机小数
uniform(a,b) -> 生成一个a到b之间的随机小数
randint(a,b) -> 生成一个a到b之间的随机整数
randrange(a,b,c) -> 随机生成一个从a开始到b以c递增的数
choice(list) -> 从列表中随机返回一个元素
shuffle(list) -> 将列表中元素随机打乱
sample(list,k) -> 从指定列表随机获取k个元素
随机种子 --> 随机数:
调用seed()函数,重置随机种子
再次设定相同的随机种子
结论:当设定相同的种子后,每次调用随机函数生成的随机数都是相同的。
计算机不能生成真正的随机数,由计算机产生的随机数都是由一个种子开始的伪随机序列。
相同的随机种子产生相同的伪随机数序列,也有利于程序的验证执行。
应用蒙瑞特卡罗方法求解Π:
# pi.py
from random import random # 从random库中引出random()函数
from math import sqrt # 从math库中引出sqrt()函数
from time import perf_counter # 从time库中引出perf_counter()函数
DARTS=1200 # 抛点次数
hits=0 # 击中次数
time_start=perf_counter() # 开始时间
for i in range(1200):
x,y=random(),random() # x,y分别取得[0,1.0]之间的随机小数
dist=sqrt(x**2+y**2) # 计算取得的随机点到原点的距离
if dist<=1.0: # 如果距离小于等于1,说明该点在四分之一圆内
hits=hits+1
pi=4*(hits/DARTS)
time_end=perf_counter() # 结束时间
time_consumed=time_end-time_start # 消耗时间==结束时间-开始时间
print("pi的值是{}".format(pi))
print("程序运行时间是{:5.5}s".format(time_consumed))
''' time.pref_counter()返回一个CPU级别的精确时间值,以秒为单位
它通常用于测量某段程序的运行时间,因此取两次调用pref_counter()的差值才有意义。'''