random

random 模块提供随机数生成功能,用于游戏、模拟、随机选择等场景。


基本用法

import random

# 生成 0-1 之间的随机浮点数
print(random.random())  # 例如:0.123456789

# 生成指定范围的随机整数
print(random.randint(1, 10))  # 1-10 之间的整数(包含 10)

# 从序列中随机选择一个元素
items = ['A', 'B', 'C', 'D']
print(random.choice(items))  # 随机选择一个元素

# 打乱序列
random.shuffle(items)
print(items)  # 打乱后的列表

常用函数

1. 随机浮点数
# 0.0 <= x < 1.0
print(random.random())

# a <= x < b
print(random.uniform(1, 5))  # 1-5 之间的浮点数
2. 随机整数
# a <= x <= b
print(random.randint(1, 10))

# 0 <= x < n
print(random.randrange(10))  # 0-9 之间的整数

# 按步长生成
print(random.randrange(0, 10, 2))  # 0, 2, 4, 6, 8 中随机选一个
3. 序列操作
# 随机选择一个元素
items = [1, 2, 3, 4, 5]
print(random.choice(items))

# 随机选择多个元素(有放回)
print(random.choices(items, k=3))  # 例如:[2, 1, 5]

# 随机选择多个元素(无放回)
print(random.sample(items, k=3))  # 例如:[3, 1, 5]

# 打乱序列
random.shuffle(items)
print(items)

设置随机种子

# 设置种子(相同种子会产生相同的随机序列)
random.seed(42)
print(random.random())  # 固定值
print(random.random())  # 固定值

# 重新设置种子
random.seed(42)
print(random.random())  # 和上面第一个值相同

示例1:骰子模拟器

import random

# 模拟掷骰子
def roll_dice():
    return random.randint(1, 6)

# 测试
print('掷骰子结果:', roll_dice())

# 掷两个骰子
print('两个骰子:', roll_dice(), roll_dice())

示例2:随机密码生成

import random
import string

# 生成随机密码
def generate_password(length=8):
    # 字符集:大小写字母 + 数字
    chars = string.ascii_letters + string.digits
    # 随机选择 length 个字符
    password = ''.join(random.choices(chars, k=length))
    return password

# 测试
print('随机密码:', generate_password())
print('12位密码:', generate_password(12))

示例3:随机颜色生成

import random

# 生成随机 RGB 颜色
def random_color():
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    return (r, g, b)

# 测试
print('随机颜色:', random_color())

# 生成 5 个随机颜色
for i in range(5):
    print(f'颜色{i+1}:', random_color())

示例4:随机事件模拟

import random

# 模拟概率事件
def simulate_event(probability):
    """probability: 事件发生的概率(0-1)"""
    return random.random() < probability

# 测试:30% 概率中奖
for i in range(10):
    if simulate_event(0.3):
        print(f'第{i+1}次: 中奖!')
    else:
        print(f'第{i+1}次: 未中奖')

注意事项

  • 随机性:random 模块使用伪随机数生成器,不是真正的随机
  • 种子:不设置种子时,会使用系统时间作为默认种子
  • 性能:在循环中多次调用随机函数可能影响性能,可考虑一次性生成多个随机数
  • 应用场景:
    • 游戏:随机敌人、掉落物品
    • 模拟:蒙特卡洛方法
    • 安全:生成密钥、令牌(注意:安全场景应使用加密安全的随机数生成器)