Python3入门指南Python语言的特点和实际应用Python3环境搭建配置VSCode进行Python开发Python基础语法Python变量与数据类型Python数据类型转换Python解释器使用Python注释使用Python运算符Python数字类型Python字符串操作Python列表操作Python元组使用Python字典使用Python集合使用Python条件控制详解Python循环语句详解Python编程入门实践Python推导式详解Python迭代器和生成器Python with语句详解Python函数详解Python lambda(匿名函数)Python装饰器Python数据结构Python模块和包使用Python中__name__和__main__的用法Python输入输出:从基础到文件操作Python文件操作Python OS模块使用Python错误和异常处理Python面向对象编程Python命名空间和作用域Python虚拟环境:venv详细教程Python类型注解Python标准库常用模块Python正则表达式Python CGI编程Python MySQL(mysql-connector驱动)Python MySQL(PyMySQL驱动)Python网络编程Python发送邮件Python多线程编程Python XML解析Python JSON解析Python日期和时间处理Python操作MongoDBPython urllib库使用Python uWSGI 安装与配置Python pip包管理工具Python operator模块Python math模块Python requests模块HTTP请求Python random模块Python OpenAI库Python AI绘画制作Python statistics模块Python hashlib模块:哈希加密Python量化交易Python pyecharts数据可视化Python Selenium网页自动化Python BeautifulSoup网页数据提取Python Scrapy爬虫框架Python Markdown转HTMLPython sys模块Python Pickle模块:数据存储Python subprocess模块Python queue队列模块Python StringIO内存文件操作Python logging日志记录Python datetime日期时间处理Python re正则表达式Python csv表格数据处理Python threading 多线程编程Python asyncio 异步编程Python PyQt 图形界面开发Python 应用方向和常用库框架

Python random模块

Python的random模块用来生成随机数,可以用于游戏开发、数据抽样、密码生成等各种需要随机性的场景。


导入模块

使用random模块前需要先导入:

import random


生成基本随机数

0到1之间的随机小数

import random

# 生成0到1之间的随机小数,包含0但不包含1
num = random.random()
print(num)  # 例如:0.548813

# 多次生成
for i in range(3):
    print(f"随机数 {i+1}: {random.random()}")

设置随机种子

设置种子可以让随机数序列可重复,这在测试时很有用:

import random

# 不设置种子,每次运行结果不同
print("无种子:", random.random())

# 设置固定种子,每次运行结果相同
random.seed(42)
print("种子42:", random.random())

random.seed(42)  # 重新设置相同种子
print("种子42:", random.random())  # 与上面结果相同


生成随机整数

指定范围内的随机整数

import random

# 生成1到10之间的随机整数(包含1和10)
dice = random.randint(1, 6)
print(f"掷骰子: {dice}")

# 生成1到100的随机数
lucky_number = random.randint(1, 100)
print(f"幸运数字: {lucky_number}")

使用randrange函数

import random

# 生成0到9的随机整数
num1 = random.randrange(10)
print(f"0-9随机数: {num1}")

# 生成1到10的随机整数
num2 = random.randrange(1, 11)
print(f"1-10随机数: {num2}")

# 生成1,3,5,7,9中的一个
num3 = random.randrange(1, 10, 2)
print(f"奇数: {num3}")


随机选择元素

从列表中随机选择

import random

fruits = ['苹果', '香蕉', '橙子', '葡萄', '西瓜']

# 随机选择一个水果
choice1 = random.choice(fruits)
print(f"今天吃: {choice1}")

# 随机选择多个水果(可重复)
choices = random.choices(fruits, k=3)
print(f"选择3个: {choices}")

从列表中随机选择多个不重复元素

import random

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 随机选择3个不重复的数字
sample = random.sample(numbers, 3)
print(f"抽奖号码: {sample}")

# 从字符串中随机选择字符
word = "Python"
random_chars = random.sample(word, 3)
print(f"随机字符: {random_chars}")


打乱列表顺序

import random

cards = ['红桃A', '红桃2', '红桃3', '红桃4', '红桃5']

print("原始顺序:", cards)

# 打乱列表顺序
random.shuffle(cards)
print("洗牌后:", cards)

# 再次打乱
random.shuffle(cards)
print("再次洗牌:", cards)


生成特定范围的随机数

指定范围内的随机小数

import random

# 生成1.0到10.0之间的随机小数
num1 = random.uniform(1.0, 10.0)
print(f"1-10随机小数: {num1:.2f}")

# 生成0到100的随机小数
num2 = random.uniform(0, 100)
print(f"0-100随机小数: {num2:.2f}")

三角形分布随机数

import random

# 生成偏向中间的随机数
num = random.triangular(1, 10, 5)
print(f"三角形分布: {num:.2f}")


实际应用案例

抽奖程序

import random

def lottery_draw(participants, winners_count):
    """抽奖函数"""
    if len(participants) < winners_count:
        return "参与人数不足"
    
    winners = random.sample(participants, winners_count)
    return winners

# 参与抽奖的人员
players = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十']

# 抽取3名获奖者
result = lottery_draw(players, 3)
print("中奖名单:", result)

随机密码生成器

import random
import string

def generate_password(length=8):
    """生成随机密码"""
    # 定义字符集
    characters = string.ascii_letters + string.digits + "!@#$%"
    
    # 随机选择字符
    password = ''.join(random.choice(characters) for i in range(length))
    return password

# 生成密码
print("8位密码:", generate_password(8))
print("12位密码:", generate_password(12))

掷骰子游戏

import random

def dice_game():
    """简单的掷骰子游戏"""
    player1_score = 0
    player2_score = 0
    
    for round in range(3):
        input(f"第{round+1}轮 - 按回车键掷骰子...")
        
        # 玩家1掷骰子
        player1_roll = random.randint(1, 6)
        player1_score += player1_roll
        
        # 玩家2掷骰子
        player2_roll = random.randint(1, 6)
        player2_score += player2_roll
        
        print(f"玩家1: {player1_roll}点, 玩家2: {player2_roll}点")
    
    print(f"\n最终得分 - 玩家1: {player1_score}, 玩家2: {player2_score}")
    
    if player1_score > player2_score:
        return "玩家1获胜!"
    elif player2_score > player1_score:
        return "玩家2获胜!"
    else:
        return "平局!"

# 开始游戏
result = dice_game()
print(result)


高级随机分布

random模块还提供了一些统计分布函数:

正态分布

import random

# 生成正态分布随机数(平均值为0,标准差为1)
normal_num = random.gauss(0, 1)
print(f"正态分布: {normal_num:.2f}")

# 生成多个正态分布数
normal_numbers = [random.gauss(100, 15) for _ in range(5)]
print("正态分布样本:", [f"{x:.1f}" for x in normal_numbers])

指数分布

import random

# 生成指数分布随机数
exp_num = random.expovariate(1.0)
print(f"指数分布: {exp_num:.2f}")


随机数状态管理

可以保存和恢复随机数生成器的状态:

import random

# 保存当前状态
state = random.getstate()

# 生成一些随机数
print("状态保存前的随机数:")
for i in range(3):
    print(random.random())

# 恢复之前的状态
random.setstate(state)

print("恢复状态后的随机数:")  # 与上面相同
for i in range(3):
    print(random.random())


生成随机字节

import random

# 生成4个随机字节
random_bytes = random.randbytes(4)
print("随机字节:", random_bytes)

# 生成随机比特位
random_bits = random.getrandbits(8)
print("8位随机数:", random_bits)
print("二进制:", bin(random_bits))


使用权重进行随机选择

import random

# 水果和对应的权重(香蕉被选中的概率最高)
fruits = ['苹果', '香蕉', '橙子']
weights = [1, 3, 2]  # 权重值

# 按权重随机选择
selected = random.choices(fruits, weights=weights, k=10)
print("带权重的选择:", selected)

# 计算每个水果被选中的次数
from collections import Counter
count = Counter(selected)
print("选择统计:", count)


注意事项

随机数的安全性

import random
import secrets

print("普通随机数(不适用于密码学):")
for i in range(3):
    print(random.random())

print("\n加密安全随机数:")
for i in range(3):
    print(secrets.randbelow(100))  # 使用secrets模块生成安全随机数

重要提示:random模块生成的随机数不适合密码学用途,如果需要安全随机数,请使用secrets模块。

常见错误避免

import random

# 错误示例:在循环中重复设置相同种子
for i in range(3):
    random.seed(42)  # 这样每次都会得到相同的"随机"数
    print(random.random())

print("---")

# 正确做法:设置一次种子,或者不设置
random.seed(42)
for i in range(3):
    print(random.random())  # 这样会得到不同的随机数


总结

random模块提供了丰富的随机数生成功能:

  • 基本随机数:random(), seed()

  • 随机整数:randint(), randrange()

  • 随机选择:choice(), choices(), sample()

  • 顺序打乱:shuffle()

  • 特定分布:uniform(), gauss(), expovariate()

这些函数在游戏开发、数据分析、测试用例生成等场景中非常有用。记住对于安全敏感的应用,要使用secrets模块而不是random模块。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/course/36_2126

目录选择