python学习篇调取或者使用随机数,random库的使用

什么是random库?

random库是python的标准库之一,用来调取或者使用随机数。
这种随机数是随机产生的数据,但是计算机是不可能产生随机值的,那么这里所谓的随机数实际上是一种伪随机数。那么问题来了,什么又是伪随机数呢?
伪随机数就是采用梅森旋转算法生成的伪随机数序列的元素。在这里我们不去研究什么是梅森旋转算法,我们称之为随机数。

如何调用random库?

使用import

import random

random库包含什么?

基本随机函数

1)seed()

初始化给定的随机数种子,默认为但前 的系统时间。

2)random()

生产一个【0.0,1.0)之间的随机小数

import random

random.seed(10) #产生种子10对应的序列
random.random() 

结果:0.5714025946899135
产生的这个随机数和这个种子有关,比如这里我们用种子10产生的第一个随机数一定就是0.57这个数。

random.random()
0.4288890546751146

再次使用random函数就产生了第二个随机小数
继续使用random函数就是继续产生一个随机数,我们也可以不给种子,那给出的随机数就会默认为当前的系统时间。那我们为什么要给种子呢?就是只要你的程序中给出了一个种子,如果后序的调用中给出的种子相同,那么所产生的随机数也就相同。

扩展随机数函数

1)randint()

生成一个[a,b]之间的整数

import random
print(random.randint(1,100))
>>>23

2)randrange(m,n[,k])

生产一个[m,n]之间步长为k的随机整数`

import random
print(random.randrange(1,10,2))
>>>5

3)getrandbits(k)

生产一个k比特长的随机数(get得到,rand随机,bits比特)

import random
print( random.getrandbits(16))
>>>47090

4)uniform(a,b)

生产一个(a,b)之间的随机小数,和random对比uniform可以生产任意范围内的小数

import random
print( random.uniform(2.1,3.1))
>>>2.4558556554308106

5)choice(sep)

从序列sep中随机选取一个元素

import random
list1 = [1,2,3,4]
print( random.choice(list1))
>>>2

6)shuffle(sep)

将序列sep中的元素打乱,并返回打乱后的序列

import random
list1 = [1,2,3,4,5,6,7,8,9]
print(random.shuffle(list1))

举例

1)简单的斗地主原理

import random
list1 = ['梅花1','梅花2','梅花3','梅花4','梅花5','梅花6','梅花7','梅花8','梅花9','梅花10','梅花J','梅花Q','梅花K']
list2 = ['方块1','方块2','方块3','方块4','方块5','方块6','方块7','方块8','方块9','方块10','方块J','方块Q','方块K']
list3 = ['红桃1','红桃2','红桃3','红桃4','红桃5','红桃6','红桃7','红桃8','红桃9','红桃10','红桃J','红桃Q','红桃K']
list4 = ['黑桃1','黑桃2','黑桃3','黑桃4','黑桃5','黑桃6','黑桃7','黑桃8','黑桃9','黑桃10','黑桃J','黑桃Q','黑桃K']
list5 = ['大王','小王']
LIST = list1 + list2 + list3 + list4 + list5
list6 = []
list7 = []
list8 = []
for i in range(17):
    a = random.choice(LIST)
    list6.append(a)
    LIST.remove(a)
print("农民甲的牌如下:{}\n".format(list6))
for i in range(17):
    b = random.choice(LIST)
    list7.append(b)
    LIST.remove(b)
print("农民乙的牌如下:{}\n".format(list7))
for i in range(20):
    c = random.choice(LIST)
    list8.append(c)
    LIST.remove(c)
print("地主的牌如下:{}\n".format(list8))
>>>农民甲的牌如下:['红桃5', '梅花K', '梅花1', '方块8', '红桃9', '方块K', '方块6', '梅花Q', '黑桃8', '红桃10', '梅花J', '方块1', '黑桃9', '梅花8', '黑桃1', '方块Q', '黑桃6']

农民乙的牌如下:['红桃K', '红桃1', '方块10', '大王', '梅花6', '红桃6', '方块7', '梅花5', '方块3', '方块9', '黑桃10', '黑桃J', '梅花2', '红桃J', '梅花7', '黑桃4', '小王']

地主的牌如下:['梅花4', '红桃3', '红桃Q', '方块J', '方块4', '黑桃5', '红桃2', '黑桃K', '方块5', '黑桃2', '梅花9', '梅花10', '黑桃Q', '方块2', '黑桃7', '红桃7', '红桃8', '梅花3', '黑桃3', '红桃4']

2)蒙特卡洛方法-圆周率计算

from random import random
from time import perf_counter

DARTS = 1000*1000
hits = 0.0
start = perf_counter() #记录开始时间

for a in range(1,DARTS + 1):
    x,y = random(),random()
    dist = pow(x**2 + y**2,0.5)
    if dist <= 1.0:
        hits = hits + 1
pi = 4 * (hits/DARTS)
print("圆周率值是:{}".format(pi))
print("运行时间是:{}".format(perf_counter()-start))
>>>圆周率值是:3.143728
运行时间是:0.8613409000000001

在这里插入图片描述

sum = 0
for k in range(100):
    a = 1/pow(16,k)*\
        (4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))
    sum = sum + a
print(sum)
>>>3.141592653589793
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值