Python案例如何生成随机数?

wen python案例 12

本文目录导读:

Python案例如何生成随机数?

  1. 使用 random 模块(最常用)
  2. 生成特定分布的随机数
  3. 使用 numpy 生成随机数(适合大数据处理)
  4. 使用 secrets 模块(用于密码学安全)
  5. 实用案例:抽奖系统
  6. 关键提示

在Python中生成随机数有多种方式,我来详细介绍最常用的几种方法。

使用 random 模块(最常用)

import random
# 生成随机浮点数 [0.0, 1.0)
print(random.random())  # 0.847329...
# 生成指定范围的随机浮点数 [a, b]
print(random.uniform(1, 10))  # 5.847...
# 生成指定范围的随机整数 [a, b]
print(random.randint(1, 6))   # 3(包含1和6)
# 生成指定范围的随机整数 [a, b),步长可指定
print(random.randrange(0, 10, 2))  # 6(0,2,4,6,8中的随机一个)
# 从序列中随机选择一个元素
fruits = ['apple', 'banana', 'orange', 'grape']
print(random.choice(fruits))  # banana
# 随机打乱列表顺序
random.shuffle(fruits)
print(fruits)  # ['grape', 'apple', 'banana', 'orange']
# 从序列中随机选择多个不重复的元素
print(random.sample(range(1, 50), 6))  # [23, 7, 45, 12, 38, 19]

生成特定分布的随机数

import random
import math
# 正态分布(高斯分布)
mean = 0
std_dev = 1
normal_random = random.gauss(mean, std_dev)
print(f"正态分布随机数: {normal_random}")
# 指数分布
lambda_param = 1.5
exponential_random = random.expovariate(lambda_param)
print(f"指数分布随机数: {exponential_random}")
# 贝塔分布
beta_random = random.betavariate(2, 5)
print(f"贝塔分布随机数: {beta_random}")
# 伽马分布
gamma_random = random.gammavariate(2, 3)
print(f"伽马分布随机数: {gamma_random}")

使用 numpy 生成随机数(适合大数据处理)

import numpy as np
# 设置随机种子(确保结果可重复)
np.random.seed(42)
# 生成随机整数数组
print(np.random.randint(0, 10, size=5))  # 5个0-9之间的整数
print(np.random.randint(0, 10, size=(2, 3)))  # 2行3列的随机整数矩阵
# 生成随机浮点数数组
print(np.random.random(5))  # 5个[0,1)之间的随机数
print(np.random.rand(2, 3))  # 2x3的随机矩阵
print(np.random.uniform(0, 100, size=10))  # 10个0-100之间的随机数
# 正态分布
print(np.random.normal(0, 1, size=5))  # 5个标准正态分布随机数
# 从列表随机选择
words = ['apple', 'banana', 'orange']
print(np.random.choice(words, size=3, replace=True))  # 可重复选择
print(np.random.choice(words, size=3, replace=False))  # 不重复选择

使用 secrets 模块(用于密码学安全)

import secrets
# 生成安全的随机整数
print(secrets.randbelow(100))  # 0-99之间的随机整数
# 生成安全的随机位
print(secrets.randbits(8))  # 8位随机数(0-255)
# 生成随机令牌(适合做密码重置token等)
token = secrets.token_hex(16)  # 32位十六进制字符串
print(f"安全令牌: {token}")
# 从序列中安全随机选择
chars = 'abcdef123456'
print(secrets.choice(chars))  # 安全地随机选一个字符

实用案例:抽奖系统

import random
class LotterySystem:
    def __init__(self):
        self.participants = []
        self.winners = []
    def add_participant(self, name):
        self.participants.append(name)
        print(f"参与者 {name} 已加入")
    def draw_winner(self):
        if not self.participants:
            print("没有参与者!")
            return None
        winner = random.choice(self.participants)
        self.winners.append(winner)
        self.participants.remove(winner)
        print(f"🎉 恭喜 {winner} 中奖!")
        return winner
    def draw_multiple_winners(self, count):
        if count > len(self.participants):
            print("参与者不足!")
            return []
        winners = random.sample(self.participants, count)
        for winner in winners:
            self.participants.remove(winner)
        self.winners.extend(winners)
        print(f"🎉 中奖者:{', '.join(winners)}")
        return winners
# 使用示例
lottery = LotterySystem()
lottery.add_participant("张三")
lottery.add_participant("李四")
lottery.add_participant("王五")
lottery.add_participant("赵六")
# 抽取一等奖
lottery.draw_multiple_winners(1)
# 抽取二等奖
lottery.draw_multiple_winners(2)

关键提示

  1. 设置随机种子:用 random.seed(n)np.random.seed(n) 可以让随机结果可重复,方便调试
  2. 安全性:处理密码、token等敏感信息时使用 secrets 模块
  3. 性能:需要生成大量随机数时,优先使用 numpy
  4. 范围:注意区分 randint(包含结尾)和 randrange(不包含结尾)

需要我详细解释某个具体场景吗?

抱歉,评论功能暂时关闭!