导航菜单

  • 1.vector
  • 2.milvus
  • 3.pymilvus
  • 4.rag
  • 5.rag_measure
  • 7.search
  • ragflow
  • heapq
  • HNSW
  • cosine_similarity
  • math
  • typing
  • etcd
  • minio
  • collections
  • jieba
  • random
  • beautifulsoup4
  • chromadb
  • sentence_transformers
  • numpy
  • lxml
  • openpyxl
  • PyMuPDF
  • python-docx
  • requests
  • python-pptx
  • text_splitter
  • all-MiniLM-L6-v2
  • openai
  • llm
  • BPETokenizer
  • Flask
  • RAGAS
  • BagofWords
  • langchain
  • Pydantic
  • abc
  • faiss
  • MMR
  • scikit-learn
  • 1. random 模块
  • 2. 环境确认
  • 3. 基础随机数函数
    • 3.1 random.random():0~1 之间的浮点数
    • 3.2 randint(a, b):整数(含两端)
    • 3.3 uniform(a, b):任意区间浮点
  • 4. 序列相关操作
    • 4.1 choice(seq):随机取一个元素
    • 4.2 choices(population, weights=None, k=1):可带权重、有放回
    • 4.3 sample(population, k):无放回抽样
    • 4.4 shuffle(seq):原地洗牌
  • 5. 常见概率分布
    • 5.1 正态分布(高斯分布)
    • 5.2 其他分布示例
  • 6. 实战案例
    • 6.1 掷骰子小程序
    • 6.2 随机密码生成器
    • 6.3 抽奖系统
    • 6.4 抛硬币统计
  • 7. 进阶技巧与注意事项
    • 7.1 固定随机种子
    • 7.2 保存 / 恢复随机状态
    • 7.3 SystemRandom:更安全的随机
  • 8. 常见问题
    • 8.1 密码学安全?
    • 8.2 性能技巧
    • 8.3 范围边界容易混淆
  • 9. 总结

1. random 模块 #

random 是 Python 内置的伪随机数模块,可以生成随机整数/浮点数、打乱序列、做加权抽样等。虽然是“伪随机”,但对教学、测试、小游戏足够使用。使用前无需额外安装(Windows、macOS 都一样),直接 import random 即可。

2. 环境确认 #

推荐在命令行确认 Python 版本,确保代码示例可运行。

# 说明:在 Windows PowerShell 下查看 Python 版本
python --version
# 说明:在 macOS / Linux 终端查看 Python 版本
python3 --version

3. 基础随机数函数 #

本节介绍最常用的随机数生成方式。所有示例都包含注释,直接复制即可运行。

3.1 random.random():0~1 之间的浮点数 #

# 说明:导入 random 模块以生成随机浮点数
import random

# 说明:循环三次生成 [0.0, 1.0) 的浮点数
for i in range(3):
    value = random.random()
    # 说明:格式化输出结果
    print(f"第 {i + 1} 次生成的随机数:{value:.4f}")

3.2 randint(a, b):整数(含两端) #

# 说明:导入 random 模块以生成随机整数
import random

# 说明:生成 1~6 的整数,模拟掷骰子
print("掷骰子结果:", random.randint(1, 6))

# 说明:生成 0~100 的随机整数
print("0~100 的随机整数:", random.randint(0, 100))

3.3 uniform(a, b):任意区间浮点 #

# 说明:导入 random 模块以生成浮点数
import random

# 说明:生成 0~1 区间随机浮点数
print("0~1 浮点数:", random.uniform(0, 1))

# 说明:生成 2.5~5.5 区间随机浮点数
print("2.5~5.5 浮点数:", random.uniform(2.5, 5.5))

4. 序列相关操作 #

random 对序列(列表/元组/字符串)也提供了便利方法。

4.1 choice(seq):随机取一个元素 #

# 说明:导入 random 模块以便从序列中挑选元素
import random

# 说明:准备水果列表
fruits = ["apple", "banana", "orange", "grape"]
# 说明:随机选择一个水果并输出
print("随机水果:", random.choice(fruits))

4.2 choices(population, weights=None, k=1):可带权重、有放回 #

# 说明:导入 random 模块以进行加权抽样
import random

# 说明:准备水果和对应权重
fruits = ["apple", "banana", "orange"]
weights = [0.1, 0.6, 0.3]
# 说明:进行 5 次抽样
print("带权重抽取:", random.choices(fruits, weights=weights, k=5))

4.3 sample(population, k):无放回抽样 #

# 说明:导入 random 模块以进行无放回抽样
import random

# 说明:准备参赛者名单
participants = ["Alice", "Bob", "Charlie", "David", "Eve"]
# 说明:随机抽取 2 名获奖者
winners = random.sample(participants, 2)
print("获奖者:", winners)

4.4 shuffle(seq):原地洗牌 #

# 说明:导入 random 模块以打乱序列
import random

# 说明:准备一副牌
cards = ["A", "2", "3", "4", "5", "J", "Q", "K"]
# 说明:原地打乱顺序
random.shuffle(cards)
print("打乱后的牌:", cards)

5. 常见概率分布 #

random 支持多种分布生成,以下示例展示最常见的几种。

5.1 正态分布(高斯分布) #

# 说明:导入 random 模块以生成正态分布样本
import random

# 说明:生成 5 个均值为 0、方差为 1 的样本
values = [random.gauss(mu=0, sigma=1) for _ in range(5)]
print("标准正态分布样本:", values)

5.2 其他分布示例 #

# 说明:导入 random 模块以生成不同分布的样本
import random

# 说明:生成指数分布样本
print("指数分布:", random.expovariate(1.0))

# 说明:生成伽马分布样本
print("伽马分布:", random.gammavariate(alpha=2.0, beta=2.0))

# 说明:生成贝塔分布样本
print("贝塔分布:", random.betavariate(alpha=0.5, beta=0.5))

6. 实战案例 #

通过小练习帮助理解 random 的组合用法。

6.1 掷骰子小程序 #

# 说明:导入 random 模块以模拟掷骰子
import random

def dice_game() -> str:
    # 说明:玩家1掷骰子
    player1 = random.randint(1, 6)
    # 说明:玩家2掷骰子
    player2 = random.randint(1, 6)
    print(f"玩家1掷出:{player1}")
    print(f"玩家2掷出:{player2}")
    # 说明:比较结果
    if player1 > player2:
        return "玩家1获胜"
    if player2 > player1:
        return "玩家2获胜"
    return "平局"

print(dice_game())

6.2 随机密码生成器 #

# 说明:导入 random 和 string 模块以生成密码
import random
import string

def generate_password(length: int = 12, use_special: bool = True) -> str:
    # 说明:基础字符集包含字母和数字
    chars = string.ascii_letters + string.digits
    # 说明:根据参数是否添加特殊字符
    if use_special:
        chars += string.punctuation
    # 说明:随机选择指定数量的字符
    return "".join(random.choices(chars, k=length))

print("简单密码:", generate_password(8, False))
print("复杂密码:", generate_password(12, True))

6.3 抽奖系统 #

# 说明:导入 random 模块以进行抽奖
import random

def lottery_draw(participants: list[str], prizes: list[str]) -> dict[str, str]:
    # 说明:随机打乱参与者顺序
    random.shuffle(participants)
    results = {}
    # 说明:逐个奖项匹配获奖者
    for prize, person in zip(prizes, participants):
        results[prize] = person
        print(f"{prize} -> {person}")
    return results

# 说明:调用抽奖函数
lottery_draw(
    participants=["张三", "李四", "王五", "赵六", "钱七"],
    prizes=["一等奖", "二等奖", "三等奖"],
)

6.4 抛硬币统计 #

# 说明:导入 random 和 Counter 用于统计
import random
from collections import Counter

def coin_flip_simulation(times: int = 1000) -> Counter:
    # 说明:模拟 times 次抛硬币
    results = [random.choice(["正面", "反面"]) for _ in range(times)]
    counter = Counter(results)
    # 说明:输出统计结果
    for side, count in counter.items():
        percentage = count / times * 100
        print(f"{side}: {count} 次 ({percentage:.1f}%)")
    return counter

coin_flip_simulation()

7. 进阶技巧与注意事项 #

7.1 固定随机种子 #

# 说明:导入 random 模块以设置种子
import random

# 说明:设置随机种子 42
random.seed(42)
# 说明:输出三次结果,确保可复现
for _ in range(3):
    print(random.randint(1, 100))

7.2 保存 / 恢复随机状态 #

# 说明:导入 random 模块以保存和恢复状态
import random

# 说明:保存当前状态
state = random.getstate()
# 说明:生成两个随机数
print("第一次:", random.randint(1, 100))
print("第二次:", random.randint(1, 100))
# 说明:恢复保存的状态
random.setstate(state)
# 说明:再次生成,结果和之前相同
print("恢复后第一次:", random.randint(1, 100))
print("恢复后第二次:", random.randint(1, 100))

7.3 SystemRandom:更安全的随机 #

# 说明:导入 random 模块以使用 SystemRandom
import random

# 说明:SystemRandom 利用操作系统熵源
secure_random = random.SystemRandom()
print("安全随机整数:", secure_random.randint(1, 100))
print("安全随机选择:", secure_random.choice(["a", "b", "c"]))

8. 常见问题 #

8.1 密码学安全? #

random 不适合生成密钥、验证码等安全场景,建议使用 secrets 模块:

# 说明:导入 secrets 以生成安全令牌
import secrets

# 说明:生成 16 字节(输出 32 个十六进制字符)的令牌
token = secrets.token_hex(16)
print("安全令牌:", token)

8.2 性能技巧 #

大量生成随机数时应避免频繁循环调用:

# 说明:导入 random 模块以生成大批量随机数
import random

# 说明:逐个生成 1000 个整数(较慢)
slow = [random.randint(1, 100) for _ in range(1000)]

# 说明:一次性从范围中抽取 1000 个(较快)
fast = random.choices(range(1, 101), k=1000)

8.3 范围边界容易混淆 #

# 说明:导入 random 模块以演示不同区间
import random

# 说明:random() 返回 [0.0, 1.0)
print(random.random())

# 说明:uniform 可能包含上限,视实现而定
print(random.uniform(1, 5))

# 说明:randint 包含两端
print(random.randint(1, 5))

9. 总结 #

| 函数 | 描述 | 适用场景 | | | | | | random() | [0.0, 1.0) 浮点数 | 基础随机 | | randint(a, b) | [a, b] 整数 | 骰子、抽奖 | | uniform(a, b) | 浮点 | 连续数值采样 | | choice/choices/sample | 序列操作 | 抽奖、抽样 | | shuffle() | 打乱序列 | 洗牌、重排 | | gauss() 等 | 概率分布 | 仿真、建模 |

访问验证

请输入访问令牌

Token不正确,请重新输入