Python学习—–随机数篇

目录


 一.随机数字

需要导入的库 

import random

1.随机整数

(1)包含上下限(闭区间)

获取一个下限为a,上限为b的随机整数[a,b]

random.randint(a,b)

import random
#示例
a=random.randint(89,88)
print(a)

注意事项:下限不可以大于上限,否则会报错

(2)包含下限,不包含上限(下闭上开)

获取一个下限闭区间为a,上限开区间为b的随机整数[a,b)

random.randrange(a,b)

#示例
import random
a=random.randrange(12,55)
print(a)

(3)设置步长(间隔)

获取一个下限闭区间为a,上限开区间为b的随机整数[a,b),同时步长为step

random.randrange(a,b,step)

举个例子:获取0~100之间的随机数,同时步长为2, 可以random.randrange(0,100,2),那么输出结果应该是0,2,4,5,6,8,10,12………98,注意100是取不到的哦,是开区间

#示例
import random
a=random.randrange(12,99,2)
print(a)

randint与randrange区别

randint两边是闭区间;randrange左边是闭区间,右边是开区间

randint不可以设置步长;randrange可以设置步长

2.随机浮点数

(1)0~1之间的浮点数

获取一个0~1之间的浮点数

random.random()

import random
a=random.random()
print(a)

(2)随机浮点数[a,b]

获取一个下限为a,上限为b的浮点数(都是闭区间)

random.uniform(a, b)

 random.uniform(a, b)是允许下限大于上限的,不会报错,两边取闭区间。

import random
a=random.uniform(12,33) #获取一个12~33之间的浮点数
a=random.uniform(33,12) #获取一个12~33之间的浮点数
print(a)

二.有序序列随机值

需要导入的库 

import random

1.随机获取单个数据结果

在一个有序序列里面,获取一个其中单个数据(有序序列包括字符串、列表、元组等等)

random.choice(有序序列),例如:random.choice([1,’wad’,5,8])

获取的数据类型是根据数据实际类型去定义的,比如:获取到了 8 那么就是int类型;获取到了’wad’ 那就是str类型

import random
print(random.choice('abcdef'))   #字符串
print(random.choice((12,'kk','蔡徐坤','只因')))  #元组
print(random.choice(['李白','韩信','孙悟空','百里玄策'])) #列表
print(random.choice([1,'wad',5,8]))  #列表

输出结果:

 2.随机获取多个数据结果

(1)一次取一个,多次取(抛硬币法则,二项分布)

获取一个有序序列中多个数据,而且每次取其中一个数据,获取多次random.choices(li,weights,k)

注释:其中 li是有序序列名字,weights 是表示概率(如果不设置就默认每个数据被取到的概率相同),k 是表示获取次数

这个函数获取的所有数据是放到一个集合的,都是列表类型(除元组外),而且数据结果可能重复相等

示例1:

如果使用 random.choices 时没有设置weights和k的值,那么默认获取一个数据,而且每个数据被获取的概率都是相等的

import random
li=[False,77,'蔡徐坤',3.1415,'IKUN']
print(random.choices(li))
print(type(random.choices(li)))

 示例2:

如果设置了获取次数k的值,没有设置weights的值,那就是每次获取一个数据,次数为k,而且每个数据的被获取概率都相等(抛硬币法则) 

import random
li=[False,77,'蔡徐坤',3.1415,'IKUN']
print(random.choices(li,k=2))
print(type(random.choices(li,k=2)))

 示例3:

自定义数据被获取概率的值weights和获取次数的值

import random
li=[False,77,'蔡徐坤',3.1415,'IKUN']
#这里定义这5个数据被获取的概率是8:1:2:3:2 ,获取次数为3
print(random.choices(li,weights=[8,1,2,3,2],k=3))

 示例4:

即使li 是字符串(str),但是获取的结果还是列表类型;但是如果是元组类型的话,那么获取的结果就是元组类型(tuple)了

import random
li='12345'
gg=(520,'蔡徐坤',3.3,True,888)
print(type(gg))
print(random.choices(li,weights=[8,1,2,3,2],k=2))
print(type(random.choices(li,weights=[8,1,2,3,2],k=2)))

 (2)一次获取多个(离散型分布)

一次性获取一个有序序列中多个数据

random.sample(li,k)

注释:其中li是列表名字,k是获取个数

这个函数获取的所有数据不存在重复的情况,是直接一次性获取k个数据(离散型分布),当然,结果类型也都是列表类型

import random
tupl=('1123',55,3.14,'好兆头')
li=[520,'蔡徐坤',3.3,True,888]
a=random.sample(li,k=3) #一次性获取3个数据
b=random.sample(tupl,k=2)
print(a,type(a))
print(b,type(b))

这里我们可以看到,用sample随机获取列表或者元组的数据,结果类型都是列表类型 

 注意事项:这个函数是一次性选择多个的,所以序列里面的数据格式必须大于选择个数,否则就会报错

choices与sample区别

1.choices是每次随机选择一个数据,可以选择多次,数据可能出现重复;而sample是一次性选择多个数据,数据不可能重复。

2.choices是可以设置数据被选择的概率的,而sample是不可以的

3.choices的数据个数是可以小于选择次数的,而sample的数据格式是不可以小于选择个数的

4.choices随机获取元组的数据,得到的结果数据类型还是元组类型(tuple),而sample得到的结果都是列表类型(list)

3.随机打乱序列的顺序(是可变序列)

已知一个列表,我想打乱这个列表的排列顺序,然后重新输出结果

random.shuffle(列表名)
注意事项:被打乱的序列必须是可变的,比如列表,如果是元组的话就会报错,因为元组是不可修改的

 这个函数是直接返回已经被打乱好的列表,然后覆盖到原来的列表,所以我们直接输出原来的列表名字就行了

 示例:

import random
li=['中国','美国','英国','日本','法国','俄罗斯']
random.shuffle(li)
print(li)

三.随机数种子

 需要导入的库 

import random

之前在学习C语言的时候我们接触过了随机数种子,这个种子是根据此时此刻的时间来产生与之相对应的随机数,因为时间是一直在向前走的,所以每一次产生的随机数都是不一样的,而在Python中也有随机数种子,但是与C语言不同的是,在Python每次产生的随机数本身就是随着时间变化,而产生不同的随机数,所以Python的随机数种子跟C语言的不一样,实际上是一种定时间的功能,设立随机数种子来保证每次产生的随机数都是具有可知性的

random.seed(时间数)

不同的时间数,产生的随机数是不一样的,但是如果是同一个时间数,那么产生的数据是一样的

 示例:
 

import random
random.seed(12)
li=('哈哈',56,3.221,False,'250')
a=random.choice(li)
print(a,type(a))

 

 实际上每次输出的结果都是一样的,如果我们把随机数种子的时间数改为其他的话,那么产生的随机数据就不一样了

 

小伙伴们,学会了吗?是不是很有意思呢!

送一张壁纸给大家 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年4月8日
下一篇 2023年4月8日

相关推荐