本文目录导读:

在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)
关键提示
- 设置随机种子:用
random.seed(n)或np.random.seed(n)可以让随机结果可重复,方便调试 - 安全性:处理密码、token等敏感信息时使用
secrets模块 - 性能:需要生成大量随机数时,优先使用
numpy - 范围:注意区分
randint(包含结尾)和randrange(不包含结尾)
需要我详细解释某个具体场景吗?