Python3 random() 函数(手把手讲解)

Python3 random() 函数:从零开始掌握随机数生成

在编程世界里,随机性就像是生活的不确定性。你无法预知下一秒会发生什么,但可以模拟它。Python3 提供了一个非常强大的模块——random,专门用来生成随机数。无论你是做游戏开发、数据模拟,还是简单的抽奖程序,random() 函数都是你不可或缺的工具。

今天我们就来深入聊聊这个看似简单却功能强大的模块。我会从基础用法讲起,逐步带你掌握它的各种技巧,最后还会分享几个实用场景,让你真正“用起来”。


基础用法:生成 0 到 1 之间的随机浮点数

random() 函数是 random 模块中最核心的一个函数。它的作用是生成一个在 0.0 到 1.0 之间(不包括 1.0)的随机浮点数。

import random

value = random.random()
print(value)

中文注释说明

  • import random:导入 Python 内置的 random 模块,这是使用 random() 函数的前提。
  • random.random():调用该函数,返回一个浮点数,范围是 [0.0, 1.0),即包含 0.0 但不包含 1.0。
  • print(value):输出生成的随机数,每次运行结果都不同。

这个函数就像是一个“随机骰子”,只不过它的点数不是整数,而是小数。比如你可能得到 0.345678、0.999999 这样的值。


生成指定范围的随机数:uniform() 与 randint()

如果你需要生成指定范围内的随机数,random() 函数本身无法满足。这时就要用到它的“兄弟”函数。

使用 uniform() 生成指定范围的浮点数

import random

random_float = random.uniform(1.5, 10.5)
print(random_float)

中文注释说明

  • random.uniform(a, b):返回一个在 [a, b] 范围内的随机浮点数,包含 a 和 b。
  • 这个函数适合需要精确控制数值范围的场景,比如模拟温度、价格波动等。

使用 randint() 生成指定范围的整数

import random

random_int = random.randint(1, 10)
print(random_int)

中文注释说明

  • random.randint(a, b):返回一个在 [a, b] 范围内的随机整数,包含 a 和 b。
  • uniform() 不同,它只返回整数,适用于模拟掷骰子、抽签编号等场景。

小贴士
有些人会误用 random.randrange(),它和 randint() 很像,但不包含右边界。比如 randrange(1, 10) 生成的是 1 到 9 之间的数。如果想生成 1 到 10,要用 randrange(1, 11)


随机选择元素:choice() 与 choices()

在实际项目中,经常需要从一个列表中随机挑选一个或多个元素。random 模块提供了两个非常实用的函数。

使用 choice() 从列表中随机选一个元素

import random

fruits = ['苹果', '香蕉', '橙子', '葡萄', '草莓']
selected_fruit = random.choice(fruits)
print(f"今天想吃:{selected_fruit}")

中文注释说明

  • random.choice(list):从给定的列表中随机选择一个元素并返回。
  • 每次运行结果都可能不同,适合用于抽奖、随机推荐等场景。

使用 choices() 从列表中随机选多个元素(可重复)

import random

colors = ['红', '蓝', '绿', '黄', '紫']
selected_colors = random.choices(colors, k=3)
print(f"随机选出的 3 个颜色:{selected_colors}")

中文注释说明

  • random.choices(list, k=n):从列表中随机选择 n 个元素,允许重复
  • k=3 表示选 3 个元素。
  • 如果你想选不重复的,就用 random.sample()

随机打乱顺序:shuffle()

如果你有一个数据列表,想让它随机排序,shuffle() 函数就是为你准备的。

import random

students = ['小明', '小红', '小刚', '小丽', '小华']
print(f"原始顺序:{students}")

random.shuffle(students)
print(f"随机打乱后:{students}")

中文注释说明

  • random.shuffle(list):直接修改原列表,将其随机打乱。
  • 这个函数非常适合“随机分组”“随机点名”等场景。
  • 注意:它不会返回新列表,而是直接改变原列表内容。

实用案例:模拟掷骰子与抽奖系统

案例一:模拟掷两个六面骰子

import random

def roll_dice():
    # 掷两个六面骰子
    die1 = random.randint(1, 6)
    die2 = random.randint(1, 6)
    total = die1 + die2
    print(f"第一次掷出:{die1},第二次掷出:{die2},总和:{total}")
    return total

roll_dice()

中文注释说明

  • 这个函数模拟了真实的掷骰子行为,每次运行结果都不同。
  • 可以扩展为多次掷骰子、判断大小点等游戏逻辑。

案例二:实现一个简单的抽奖程序

import random

participants = ['张三', '李四', '王五', '赵六', '钱七', '孙八']
prize = 'iPhone 15'

winner = random.choice(participants)
print(f"🎉 恭喜 {winner} 中奖!奖品是:{prize}")

中文注释说明

  • 使用 random.choice() 从参与者名单中随机选出一人。
  • 可扩展为多轮抽奖、不重复抽取等复杂逻辑。
  • 适合用于活动宣传、社群互动等场景。

高级技巧:设置随机种子与可复现性

在调试或测试程序时,我们常常希望“随机”结果能重复出现。这时就可以用到 seed() 函数。

import random

random.seed(42)

print(random.random())  # 输出:0.6394267984578837
print(random.randint(1, 10))  # 输出:7

random.seed(42)
print(random.random())  # 输出:0.6394267984578837

中文注释说明

  • random.seed(n):设置随机数生成器的初始状态。
  • 只要种子相同,后续生成的随机数序列就完全一样。
  • 适合用于测试、教学演示、复现 bug 等场景。

重要提醒
在生产环境中,通常不设置种子,以确保真正的随机性。只有在需要可复现性的场景才使用 seed()


常见误区与最佳实践

误区 正确做法 说明
误用 random.random() 生成整数 使用 randint()uniform() random() 返回的是浮点数,不能直接当整数用
忘记导入 random 模块 添加 import random 否则会报错 NameError
shuffle() 生成新列表 使用 sample() 或切片 shuffle() 是就地修改,不会返回新列表
每次运行都期望相同结果 设置 seed() 如需可复现,必须设置种子

总结:掌握 Python3 random() 函数的关键

Python3 random() 函数 是编程中不可或缺的工具,它不仅功能丰富,而且使用简单。从生成基础随机数,到随机选择、打乱顺序,再到模拟真实世界的随机行为,它都能轻松应对。

无论你是初学者,还是有一定经验的开发者,只要掌握以下几个核心函数,就能应对大多数随机需求:

  • random.random():生成 0 到 1 的浮点数
  • random.randint(a, b):生成指定范围的整数
  • random.uniform(a, b):生成指定范围的浮点数
  • random.choice(list):从列表中随机选一个
  • random.shuffle(list):就地打乱列表顺序

记住,随机不是“混乱”,而是一种可控的不确定性。合理使用 random 模块,能让程序更生动、更贴近现实。

最后,别忘了:真正的随机,往往始于一次精准的初始化