Python random 模块的总结

简介: Python random 模块的总结

【 原创作者:小康2021 】

random 模块

random 库是使用随机数的 Python 标准库,使用时候只需要 import random 即可。


从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但是计算机是不可能产生随机值的,真正的随机数也只是在特定条件下产生的确定值,只不过这些条件我们没有理解,或者超出了我们的理解范围。


计算机不能产生真正的随机数,只能产生类似于随机数的伪随机数。


注:伪随机数是计算机中通过采用梅森旋转算法生成的(伪)随机序列元素


random 模块的作用就是产生伪随机数,其包含了 randint 函数、random 函数、uniform 函数、choice 函数、randrange 函数、sample 函数以及 shuffle 函数等多种与随机有关的函数,下面将着重介绍几种。

一、randint 函数

1、用法

num = randint(start, end)

产生一个 [ start , end ] 内的一个整数型(int)随机数,其中 start 和 end 必须为整数,且 start <= end 。

2、实例

1. from random import randint
2. print(randint(1, 1000))    #在 1 到 1000 之间随机产生一个整数

输出结果为:

666

特别地,当 start 等于 end 的时候,比如:

1. from random import randint
2. print(randint(3, 3))    #此时 start = end

输出的结果永远是:

3

3、错误用法

如果 start > end ,那么就会报错:

1. from random import randint
2. print(randint(5, 2))    #此时 start > end

报错内容为:

ValueError: empty range for randrange() (5, 3, -2)

二、random 函数

1、用法

num = random()

产生一个随机生成的浮点型(float)实数,其范围在 [ 0 , 1 ) 内,不包括 1 。

2、实例

from random import random
print(random())    #随机产生一个 0 到 1 且不包括 1 的浮点数
print(10*random())    #随机产生一个 0 到 10 且不包括 10 的浮点数

输出结果为:

1. 0.4167967975536755
2. 7.7058321694517335

三、uniform 函数

1、用法

num = uniform(start, end)

产生一个 [ start , end ] 内的一个浮点型(float)随机数,start 和 end 可以不是整数,且 start 与 end 的顺序可以颠倒。

2、实例

1. from random import uniform
2. print(uniform(1.5, 3))
3. print(uniform(3, 1.5))

这两种用法都是可行的,其输出结果为:

1. 2.485862092821843
2. 1.658384848539999

同时,与 randint 函数相同的是:

1. from random import uniform
2. print(uniform(1.5, 1.5))    #此时 start = end

输出结果永远为:

1.5

四、choice 函数

1、用法

value = choice(seq)

seq 可以是一个非空序列,如列表(list)、元组(tuple)、字符串(str),但不能是集合(set)。choice 函数会从非空序列中随机选取一个数据作为返回值。

2、实例

from random import choice
print(choice(('you','me','them')))    #此时 seq 为元组(tuple)
print(choice(['我','是','好','学','生']))    #此时 seq 为字符串构成的列表(list)
print(choice([1,2,3,4,5]))    #此时 seq 为整数构成的列表(list)
print(choice('哔哩哔哩 (゜-゜)つロ 干杯~-bilibili'))    #此时 seq 为字符串(str)

输出结果为:

1. you
2. 是
3. 2
4. 哔

3、错误用法

如果 seq 是一个集合(set),那么就会报错:

1. from random import choice
2. print(choice({'这','是','一','个','集','合'}))    #此时 seq 为一个集合(set)

报错内容为:

TypeError: 'set' object is not subscriptable

五、randrange 函数

1、用法

num = randrange(start, stop, step)

产生一个 [ start , stop ) 以内,间隔为 step 的随机整数,但不包括 stop ,且 start、stop、step 都必须为整数,而且 step ≠ 0 ,start  ≠ stop 。


若 step > 0,则必须 start < stop ;若 step < 0,则必须 start > stop 。

2、实例

from random import randrange
print(randrange(1,101,3))    #从 1 到 101 中以 3 为间隔随机选取一个整数
print(randrange(101,1,-3))    #从 101 到 1 中以 -3 为间隔随机选取一个整数

输出结果为:

1. 40
2. 5

3、错误用法

(1)如果 step = 0,那么就会报错:

1. from random import randrange
2. print(randrange(1,4,0))    #此时 step = 0

报错内容为:

ValueError: zero step for randrange()

(2)如果 start = stop ,那么就会报错:

1. from random import randrange
2. print(randrange(1,1,1))    #此时 start = end

报错内容为:

ValueError: empty range for randrange() (1, 1, 0)

(3)如果 step < 0 ,而 start < stop ,或者 step > 0 ,而 start > stop 那么就会报错:

from random import randrange
print(randrange(2,5,-2))    #此时 step < 0 ,而 start < end 

报错内容为:

ValueError: empty range for randrange()

4、省略用法

start 和 step 都可以不提供参数,默认是从 0 开始,间隔为 1 。但如果需要指定 step ,则必须先指定 start 。

from random import randrange
print(randrange(4))    #从 0, 1, 2, 3 中随机选取一个整数
print(randrange(1, 4))    #从 1, 2, 3 中随机选取一个整数

输出结果为:

1. 2
2. 3

从中我们可以看出 randrange(start, stop, step) 其实在效果上等同于 choice(range(start, stop, step)) 。

六、samp

1、用法

num = sample(population, x)

le 函数population 是一个非空列表序列,x 是需要从列表中随机选取元素的个数,x 的值不可超过 population 的元素个数。


sample 函数会从 population 中随机选取 x 个元素,但其不改变原序列,并将这 x 个元素以一个新列表的形式输出,其中输出的元素没有顺序之分。


2、实例

from random import sample
a = [1, 2, 3, 4, 5]
b = 'Nice!'
print(sample(a,2))    #从列表 a 中随机选取两个元素
print(sample(b,3))    #从字符串 b 中随机选取三个元素
print(a,b)    #打印原序列

输出结果为:

1. [3, 5]
2. ['!', 'c', 'e']
3. [1, 2, 3, 4, 5] Nice!    #原序列未改变

3、错误用法

如果 x 的值超过 population 的元素个数,那么就会报错:

1. from random import sample
2. print(sample([1,2,3],4))    #此时 x 的值超过了序列 population 中元素的个数

报错内容为:

ValueError: Sample larger than population or is negative

七、shuffle 函数

1、用法

shuffle(seq)

将序列 seq 中元素的顺序打乱,即改变原来的序列,此处序列 seq 不可为字符串(str)。

2、实例

from random import shuffle
list = ['我','是','大','聪','明']
shuffle(list)    #打乱 list 列表
print(list)

输出结果为:

['大', '聪', '明', '是', '我']

3、错误用法

如果 seq 为字符串(str),那么就会报错:

from random import shuffle
str = '字符串'
shuffle(str)
print(str)

报错内容为:

TypeError: 'str' object does not support item assignment
目录
相关文章
|
28天前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
45 4
|
8天前
|
Python
Python Internet 模块
Python Internet 模块。
102 74
|
25天前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
104 63
|
27天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
27天前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
28天前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
38 5
|
27天前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
1月前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
47 5
|
1月前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块

热门文章

最新文章