本文目录导读:

在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(不包含结尾)
需要我详细解释某个具体场景吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播