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 模块,能让程序更生动、更贴近现实。

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