Python的random模块用来生成随机数,可以用于游戏开发、数据抽样、密码生成等各种需要随机性的场景。
使用random模块前需要先导入:
import randomimport 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}")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模块。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!