在 Python 中,random 是内置的伪随机数模块,主要用于生成随机数、随机选择元素、随机打乱顺序、随机采样等,广泛用于游戏、测试、验证码、抽奖、数据随机化等场景。
random 模块生成的是伪随机数支持数字、列表、字符串等多种数据类型。
伪随机数是指由计算机程序通过特定算法、数学公式或预设逻辑生成的数值序列,这类数字表面上呈现出无规律、不可预测的随机特征,但本质上并非真正意义上的随机数。
与自然界中如粒子运动、环境噪声这类完全不可预知、无固定规律的真随机现象不同,伪随机数的产生过程具备可复现性,只要初始种子值与算法保持一致,就能生成完全相同的数字序列。
伪随机数广泛应用于日常编程、密码学基础应用、模拟测试、游戏数值生成等场景,是计算机系统中实现随机效果的核心方式之一。
生成 [0.0, 1.0) 之间的随机浮点数(包含 0,不包含 1),示例:
import random
# 生成 0~1 之间的随机浮点数
num = random.random()
print("随机浮点数:", num)运行结果:
随机浮点数: 0.15919151657706765生成 [a, b] 之间的随机浮点数(a、b 可互换大小),示例:
import random
# 生成 1~5 之间的随机浮点数
num = random.uniform(1, 5)
print("1~5随机浮点数:", num)运行结果:
1~5随机浮点数: 1.4465055587094855生成 [a, b] 之间的随机整数(包含 a 和 b,必须 a≤b)。该方法非常实用,适合生成验证码、随机年龄、随机编号等。不需要像 uniform() 方法生成的随机数还需要转换成整数。例如:
import random
# 生成 1~10 之间的随机整数
num = random.randint(1, 10)
print("1~10随机整数:", num)运行结果:
1~10随机整数: 10按指定步长生成随机整数(不包含 stop),等价于从 range(start, stop, step) 中随机选一个数。例如:
import random
# 生成 0~10 之间的偶数(步长2)
num = random.randrange(0, 10, 2)
print("0~10随机偶数:", num) # 输出:0/2/4/6/8
# 简写:只传结束值,默认从0开始
num = random.randrange(5)
print("0~4随机整数:", num) # 输出:0-4任意数运行结果:
0~10随机偶数: 6
0~4随机整数: 4从非空序列中随机选择 1 个元素,适合列表、字符串、元组。例如:
import random
# 列表随机选1个
lst = ["苹果", "香蕉", "橙子", "葡萄"]
res = random.choice(lst)
print("随机水果:", res)
# 字符串随机选1个字符
s = "abcdefg"
res = random.choice(s)
print("随机字符:", res)运行结果:
随机水果: 苹果
随机字符: b随机选择多个元素(可重复),参数 weights 表示权重(概率),k 表示选取数量。例如:
import random
lst = ["一等奖", "二等奖", "三等奖", "谢谢参与"]
# 随机选2个(可重复)
res = random.choices(lst, k=2)
print("随机选2个:", res)
# 带权重(概率):一等奖概率1,二等奖2,三等奖3,谢谢参与10
res = random.choices(lst, weights=[1,2,3,10], k=1)
print("加权随机:", res)运行结果:
随机选2个: ['一等奖', '二等奖']
加权随机: ['谢谢参与']随机选择 k 个不重复的元素(无重复采样),要求 k ≤ 序列长度。例如:
import random
lst = [1,2,3,4,5,6,7,8,9,10]
# 随机选3个不重复的数字
res = random.sample(lst, 3)
print("随机3个不重复数:", res)运行结果:
随机3个不重复数: [7, 8, 10]随机打乱序列顺序(原地修改,无返回值),注意,仅适用于可变序列(列表)。例如:
import random
lst = [1,2,3,4,5]
# 打乱顺序
random.shuffle(lst)
print("打乱后列表:", lst)运行结果:
打乱后列表: [2, 1, 5, 3, 4]设置随机种子,让随机结果固定(可复现),注意,相同种子,生成的随机数完全一样。例如:
import random
# 设置种子为 10
random.seed(10)
print(random.randint(1,100))
# 再次设置相同种子,结果不变
random.seed(10)
print(random.randint(1,100))运行结果:
74
74该示例包含功能如下:
生成 4 位数字验证码
随机抽取 3 名中奖员工
随机打乱游戏顺序
生成 10 个 1~100 不重复随机数
完整代码:
import random
def random_tool():
# 1. 生成4位数字验证码
code = random.randint(1000, 9999)
print(f"1. 4位验证码:{code}")
# 2. 员工抽奖(不重复抽取3人)
employees = ["张三", "李四", "王五", "赵六", "钱七", "孙八", "周九"]
winners = random.sample(employees, 3)
print(f"2. 中奖员工:{winners}")
# 3. 随机打乱游戏关卡顺序
levels = ["关卡1", "关卡2", "关卡3", "关卡4", "关卡5"]
random.shuffle(levels)
print(f"3. 打乱后关卡:{levels}")
# 4. 生成10个 1~100 不重复随机数
random_nums = random.sample(range(1, 101), 10)
print(f"4. 10个不重复随机数:{random_nums}")
# 执行工具
if __name__ == "__main__":
random_tool()运行结果:
1. 4位验证码:9986
2. 中奖员工:['孙八', '王五', '李四']
3. 打乱后关卡:['关卡3', '关卡2', '关卡4', '关卡5', '关卡1']
4. 10个不重复随机数:[98, 48, 80, 61, 94, 37, 12, 22, 90, 74]更多关于 random 模块的用法请参考 https://docs.python.org/3/library/random.html 官方手册。