random模块详解
在Python编程中,随机数生成是许多应用程序的基础操作之一。random模块是一个经常用于生成随机数的模块,它提供了许多函数,可以生成不同类型的随机数,如整数、浮点数、随机序列等,还可以用于生成随机字符串、洗牌、抽样等随机操作。在模拟数据、游戏开发、密码学等领域,random模块的使用非常广泛。
1、random.random()函数
random.random()函数是random模块最基础的功能之一,它生成一个0到1之间的随机浮点数。例如:
动手练一练:
import random
print("第一次:", random.random())
print("第二次:", random.random())
执行以上代码,输出结果为:
第一次: 0.9706017499764218
第二次: 0.4207259149867135
上面的例子中,每次运行得到的结果都是不一样的。这个函数在很多情况下都很有用,比如生成随机数、模拟随机事件等。
2、random.randint()函数
random.randint()函数用于生成一个指定范围内的整数
动手练一练:
import random
print("第一次:", random.randint(1, 50))
print("第二次:", random.randint(1, 50))
print("第三次:", random.randint(1, 50))
# 错误 print("第四次:", random.randint(50, 1))
执行以上代码,输出结果为:
第一次: 41
第二次: 48
第三次: 32
上面的例子中,每次运行得到的结果也都是不一样的。这里需要注意的是,传入的两个参数必须是整数,而且第一个参数一定要比第二个参数小,否则,Python解释器会输出错误信息:“ValueError: empty range for randrange() ”(值错误:randrange() 的范围为空)。
3、random.uniform()函数
random.uniform()函数用于生成一个指定范围内的随机浮点数。例如:
动手练一练:
import random
print("第一次:", random.uniform(1, 50))
print("第二次:", random.uniform(2.5, 4.8))
print("第三次:", random.uniform(50, 40))
print("第四次:", random.uniform(-20, 40))
执行以上代码,输出结果为:
第一次: 9.00072151073187
第二次: 3.534322307986529
第三次: 46.30500695853068
第四次: -0.6742589627752267
上面的例子中,每次运行得到的结果也都是不一样的。传入的两个参数可以是任意的数字包括整数,浮点数,负数。
4、random.choice()函数
random.choice()函数可以从给定的序列中随机选择一个元素返回。例如:
动手练一练:
import random
a = (5, 7, 16, 39, 57)
b = ["Orange", "Apple", "Banana", "Apple", "Cherry"]
c = "python"
print(random.choice(a))
print(random.choice(b))
print(random.choice(c))
执行以上代码,输出结果为:
7
Banana
h
上面的例子中,给定的序列包括列表, 元组, 字符串。
5、random.sample()函数
random.sample()函数可以从指定序列中随机获取指定长度的片断。注意,random.sample()函数不会修改原有序列。
动手练一练:
import random
a = ["Orange", "Apple", "Banana", "Apple", "Cherry"]
print(random.sample(a, 2))
print(random.sample(a, 3))
执行以上代码,输出结果为:
['Orange', 'Banana']
['Apple', 'Apple', 'Cherry']
6、random.randrange()函数
random.randrange()函数生成一个在指定范围内以指定步长递增的随机整数,例如:
动手练一练:
import random
print(random.randrange(0, 20))
print(random.randrange(0, 20, 2))
print(random.randrange(0, 20, 3))
print(random.randrange(0, 20, 5))
执行以上代码,输出结果为:
8
18
12
10
上面的例子中,random.randrange(0, 20)中没有传入第三个参数,则默认步长为“1”,随机生成[0,20]范围内一个整数。random.randrange(0, 20, 2)中传入第三个参数以指定步长为“2”,即生成[0,20)范围内的随机偶数(也就是2的倍数),包括“0”,但不包括“20”。
7、random.shuffle()函数
random.shuffle()函数用于将指定序列中的元素随机打乱顺序。例如:
动手练一练:
import random
a = list(range(1, 8)) # list()函数创建一个由1~7组成的列表,不包括8
b = ["Orange", "Apple", "Banana", "Apple", "Cherry"]
print("-----打乱前-----")
print(a) # 输出 [1, 2, 3, 4, 5, 6, 7]
print(b) # 输出 ['Orange', 'Apple', 'Banana', 'Apple', 'Cherry']
random.shuffle(a)
random.shuffle(b)
print("-----打乱后-----")
print(a) # 输出 [1, 5, 3, 6, 2, 4, 7]
print(b) # 输出 ['Banana', 'Apple', 'Cherry', 'Orange', 'Apple']
执行以上代码,输出结果为:
-----打乱前-----
[1, 2, 3, 4, 5, 6, 7]
['Orange', 'Apple', 'Banana', 'Apple', 'Cherry']
-----打乱后-----
[1, 5, 3, 6, 2, 4, 7]
['Banana', 'Apple', 'Cherry', 'Orange', 'Apple']
这里需要注意的是,random.shuffle()函数会修改原来的序列,所以原来的序列必须是可修改的,因此元组等类型不能作为random.shuffle()函数的参数使用。
8、random.seed()函数
random.seed()函数俗称为随机数种子。如果不设置随机数种子,我们每次随机抽样得到的数据都是不一样的。设置了随机数种子,能够确保每次抽样的结果一样。例如:
动手练一练:
import random
# 不传入参数值时,产生的随机数是不一样的
print("-------不传入参数值-------")
random.seed()
print("seed()不传入参数值:", random.random())
random.seed()
print("seed()不传入参数值:", random.random())
# 设置参数值为1,产生的随机数一样
print("-------设置参数值为1-------")
random.seed(1)
print("seed(1)传入参数值:", random.random())
random.seed(1)
print("seed(1)传入参数值:", random.random())
random.seed(1)
print("seed(1)传入参数值:", random.random())
# 改变参数值为2,产生的随机数也会发生变化
print("-------改变参数值为2-------")
random.seed(2)
print("seed(2)改变参数值:", random.random())
random.seed(2)
print("seed(2)改变参数值:", random.random())
print("-------再次把参数值改为1-------")
random.seed(1)
print("seed(1)参数值再次改为1:", random.random())
执行以上代码,输出结果为:
-------不传入参数值-------
seed()不传入参数值: 0.5174558211505319
seed()不传入参数值: 0.4396472431539268
-------设置参数值为1-------
seed(1)传入参数值: 0.13436424411240122
seed(1)传入参数值: 0.13436424411240122
seed(1)传入参数值: 0.13436424411240122
-------改变参数值为2-------
seed(2)改变参数值: 0.9560342718892494
seed(2)改变参数值: 0.9560342718892494
-------再次把参数值改为1-------
seed(1)参数值再次改为1: 0.13436424411240122
上面的例子中,random.seed()如果没有传入参数,则我们每次随机抽样得到的数据都是不一样的。当我们预先使用random.seed(x)设定好种子之后(注意:其中的x可以是任意数字),每次生成的随机数都会是相同的。random.seed()括号里的数字,相当于一把钥匙,对应一扇门,同样的数值能够使得抽样的结果一致。