当前位置:首页 > Python > 正文

Python random库详解 - 随机数生成与应用指南

Python random库详解

全面掌握随机数生成与应用技巧

random库简介

Python的random模块提供了生成随机数的功能,支持多种随机数生成方法,是数据科学、机器学习、游戏开发和模拟实验的重要工具。

核心功能:

  • 生成各种类型随机数(整数、浮点数)
  • 从序列中随机选择元素
  • 随机排列序列元素
  • 生成随机样本
  • 控制随机数生成种子

基本随机数生成

1. random.random()

生成一个[0.0, 1.0)范围内的随机浮点数

import random

# 生成随机浮点数
rand_float = random.random()
print(f"随机浮点数: {rand_float}")

2. random.uniform(a, b)

生成[a, b]范围内的随机浮点数

# 生成10到20之间的随机浮点数
rand_uniform = random.uniform(10, 20)
print(f"均匀分布随机数: {rand_uniform}")

3. random.randint(a, b)

生成[a, b]范围内的随机整数

# 生成1到100之间的随机整数
rand_int = random.randint(1, 100)
print(f"随机整数: {rand_int}")

序列操作函数

1. random.choice(seq)

从非空序列中随机选择一个元素

fruits = ['苹果', '香蕉', '橙子', '葡萄', '西瓜']
selected = random.choice(fruits)
print(f"随机选择的水果: {selected}")

2. random.shuffle(seq)

将序列中的元素随机排序(原地修改)

cards = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
print("原始顺序:", cards)

random.shuffle(cards)
print("洗牌后:", cards)

3. random.sample(population, k)

从序列中随机选择k个不重复的元素

numbers = list(range(1, 51))  # 1到50的数字

# 随机选择5个不重复的数字
lucky_numbers = random.sample(numbers, 5)
print("幸运数字:", lucky_numbers)

高级随机数生成

1. 随机种子(random.seed)

设置随机种子可以重现随机结果

# 设置随机种子
random.seed(42)

# 生成可重现的随机数
print("第一次:", random.random())
print("第二次:", random.random())

# 重置种子
random.seed(42)
print("重置后第一次:", random.random())

2. 高斯分布(random.gauss)

生成符合高斯分布(正态分布)的随机数

# 生成均值为0,标准差为1的随机数
normal_random = random.gauss(0, 1)
print(f"高斯分布随机数: {normal_random}")

实践应用案例

1. 生成随机验证码

def generate_captcha(length=6):
    """生成指定长度的数字字母混合验证码"""
    characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    return ''.join(random.choices(characters, k=length))

print("验证码:", generate_captcha())

2. 抽奖程序

def lottery_draw(participants, winners_count):
    """从参与者中抽取指定数量的获奖者"""
    if winners_count > len(participants):
        raise ValueError("获奖者数量不能超过参与者数量")
    
    return random.sample(participants, winners_count)

# 参与者列表
participants = ["张三", "李四", "王五", "赵六", "钱七", "孙八", "周九", "吴十"]
winners = lottery_draw(participants, 3)

print("获奖者:", winners)

3. 随机密码生成器

def generate_password(length=12):
    """生成强密码,包含大小写字母、数字和特殊字符"""
    lowercase = "abcdefghijklmnopqrstuvwxyz"
    uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    digits = "0123456789"
    symbols = "!@#$%^&*()_+-=[]{}|;:,.<>?"
    
    # 确保每种类型至少一个字符
    password = [
        random.choice(lowercase),
        random.choice(uppercase),
        random.choice(digits),
        random.choice(symbols)
    ]
    
    # 添加剩余字符
    all_chars = lowercase + uppercase + digits + symbols
    password += random.choices(all_chars, k=length-4)
    
    # 打乱顺序
    random.shuffle(password)
    return ''.join(password)

print("随机密码:", generate_password())

使用注意事项

  • random模块生成的随机数并非真正的随机数,而是伪随机数
  • 在密码学应用中,应使用secrets模块而非random模块
  • 设置随机种子可以重现结果,适用于需要复现的实验场景
  • random.shuffle会修改原始列表,不会返回新列表
  • random.sample确保选择不重复元素,而random.choices可能选择重复元素

发表评论