[python]random模块(介绍+使用)

当然可以!Python 的 random 模块是生成伪随机数 的核心工具,适用于模拟、游戏、抽样、密码学(不推荐直接用,应用 secrets 模块)等场景。我来为你详细介绍一下它的常用函数和技巧,并附上实用示例。


一、常用函数详解

1️⃣ 基础随机数

  • random.random()

    生成 [0.0, 1.0) 之间的随机浮点数。

    python 复制代码
    import random
    print(random.random())  # 输出类似 0.548813502037
  • random.uniform(a, b)

    生成 [a, b] 之间的随机浮点数(a 可大于 b)。

    python 复制代码
    print(random.uniform(2.5, 10.0))  # 如 7.342
  • random.randint(a, b)

    生成 [a, b] 之间的随机整数(包含两端)。

    python 复制代码
    print(random.randint(1, 6))      # 模拟骰子:1~6

2️⃣ 序列操作

  • random.choice(seq)

    从非空序列(列表/元组/字符串)中随机选择一个元素。

    python 复制代码
    colors = ['红', '绿', '蓝']
    print(random.choice(colors))     # 如 "绿"
  • random.choices(population, weights=None, k=1)

    从序列中按权重抽取 k 个元素(可重复)。

    python 复制代码
    # 抽奖:10%概率中奖,90%概率谢谢惠顾
    result = random.choices(['中奖', '谢谢'], weights=[0.1, 0.9], k=5)
    print(result)  # 如 ['谢谢','谢谢','中奖','谢谢','谢谢']
  • random.shuffle(seq)
    原地打乱序列顺序(直接修改原序列)。

    python 复制代码
    cards = ['A', 'K', 'Q', 'J']
    random.shuffle(cards)
    print(cards)  # 如 ['Q', 'A', 'J', 'K']
  • random.sample(population, k)

    从序列中无重复 地随机抽取 k 个元素(不修改原序列)。

    python 复制代码
    numbers = [1, 2, 3, 4, 5]
    print(random.sample(numbers, 3))  # 如 [3, 1, 5]

3️⃣ 概率分布

  • random.gauss(mu, sigma)
    生成高斯分布(正态分布)随机数,mu 为均值,sigma 为标准差。

    python 复制代码
    # 生成平均值为0,标准差为1的随机数
    print(random.gauss(0, 1))  # 如 -0.345

二、重要技巧与注意事项

  1. 设置随机种子(Reproducibility)

    random.seed(seed_value) 确保每次运行结果一致:

    python 复制代码
    random.seed(42)  # 种子可以是任意整数
    print(random.randint(1, 100))  # 总是输出同样的"随机"数
  2. 生成随机字符串

    结合 choices() 和字符串常量:

    python 复制代码
    import string
    random_str = ''.join(random.choices(string.ascii_letters + string.digits, k=8))
    print(random_str)  # 如 "gH7zF2qK"
  3. 安全场景警告
    不要random 模块生成密码或密钥!

    应使用加密安全的 secrets 模块:

    python 复制代码
    import secrets
    secure_token = secrets.token_urlsafe(16)  # 安全的随机URL字符串

三、完整示例:抽奖程序

python 复制代码
import random

# 参与抽奖人员
participants = ["张三", "李四", "王五", "赵六", "钱七"]

# 设置种子保证可复现(实际应用可去掉)
random.seed(2023)

# 抽取3个不重复的获奖者
winners = random.sample(participants, 3)

print("🎉 获奖名单:", winners)
# 输出示例:获奖名单: ['李四', '钱七', '王五']

四、其他实用函数

函数 用途
random.randrange(start, stop[, step]) 类似 range() 的随机整数
random.triangular(low, high, mode) 三角分布随机数
random.betavariate(alpha, beta) Beta 分布
random.expovariate(lambd) 指数分布

总结

  • 基础随机random.random(), random.uniform(a,b), random.randint(a,b)
  • 序列操作choice()选择一个, choices()可以选择多个, shuffle(), sample()
  • 高级分布gauss(), expovariate()
  • 安全 :涉及密码学用 secrets 模块!
  • 可复现性 :用 seed() 固定随机种子

通过灵活组合这些函数,你可以轻松实现从简单抽奖到复杂仿真的各类功能。如果有具体应用场景,欢迎继续提问! 😊

相关推荐
jerryinwuhan23 分钟前
《Python数据预处理》第四章
开发语言·python
雨晨源码(同名B站)1 小时前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
阿童木写作1 小时前
跨境电商图片翻译工具推荐:跨马翻译批量处理视频字幕与抠图
python·音视频
怪奇云呼军2 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
ZC跨境爬虫2 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
Patrick在香港2 小时前
Python正则表达式实战:解析和验证香港身份证、车牌、电话格式
开发语言·python·正则表达式
路溪非溪2 小时前
Python语言的执行流程总结
开发语言·python
宋均浩3 小时前
AI 生成代码质量防线实战:5 个 CI/CD 配置,把 8% 的逻辑错拦在线上之前0
python
树码小子3 小时前
Pycharm解释器配置问题解决
ide·python·pycharm
国雪3 小时前
python-协程
python