Python3 randrange() 函数(千字长文)

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

在编程世界里,随机数就像生活中的“抽签”——它不按常理出牌,却能让程序更有趣、更贴近真实场景。无论是开发小游戏、模拟实验,还是生成测试数据,随机数都是不可或缺的工具。Python 3 提供了多种生成随机数的方式,其中 randrange() 函数因其灵活性和高效性,成为许多开发者首选。

今天,我们就来深入聊聊 Python3 randrange() 函数,帮你从基础用法到进阶技巧,全面掌握它的能力。


什么是 randrange() 函数?

randrange() 是 Python 内置模块 random 中的一个函数,用于生成一个指定范围内的随机整数。与 random.randint() 不同,randrange() 更加灵活,支持步长参数,且不包含上限值

简单来说,randrange(stop) 会返回一个从 0 到 stop-1 之间的随机整数,而 randrange(start, stop) 则是从 start 到 stop-1 之间随机选取一个值。

📌 小贴士:randrange() 生成的是整数,如果你需要浮点数,应该使用 random.uniform()random.random()


基本语法与参数说明

randrange() 的语法如下:

random.randrange(start, stop, step)
  • start:起始值(包含),默认为 0
  • stop:终止值(不包含),必须提供
  • step:步长(可选),默认为 1

⚠️ 注意:stop 是必须的,不能省略。如果只写一个参数,它会被当作 stopstart 默认为 0。

参数详解

参数 类型 是否必填 说明
start int 起始值(包含)
stop int 终止值(不包含)
step int 步长,控制每次增加的量

基础用法示例

让我们通过几个例子,直观感受 randrange() 的工作方式。

生成 0 到 9 之间的随机整数

import random

random_num = random.randrange(10)
print(f"随机数是:{random_num}")

🔍 注释:这里 10 作为 stop 参数,表示范围是 [0, 10),即 0 到 9。start 默认为 0,无需显式写出。

生成 1 到 100 之间的随机整数

import random

random_num = random.randrange(1, 101)
print(f"随机数是:{random_num}")

🔍 注释:start=1stop=101,所以实际范围是 [1, 101),即 1 到 100 之间的整数。


使用步长参数:控制随机数的跳跃

step 参数是 randrange() 的一大亮点。它允许你生成等差序列中的随机数,比如只生成偶数或奇数。

生成 0 到 20 之间的随机偶数

import random

random_even = random.randrange(0, 21, 2)
print(f"随机偶数是:{random_even}")

🔍 注释:start=0stop=21(不包含 21),step=2,所以生成的是 0, 2, 4, ..., 20 中的一个随机数。

生成 1 到 100 之间的随机奇数

import random

random_odd = random.randrange(1, 101, 2)
print(f"随机奇数是:{random_odd}")

🔍 注释:从 1 开始,每次加 2,直到小于 101,所以结果是 1, 3, 5, ..., 99 中的一个。


实际应用场景:模拟掷骰子游戏

我们来做一个小项目:模拟掷两个六面骰子,计算点数和。

import random

def roll_dice():
    # 掷第一个骰子:1 到 6 之间的随机整数
    dice1 = random.randrange(1, 7)
    # 掷第二个骰子:1 到 6 之间的随机整数
    dice2 = random.randrange(1, 7)
    # 计算总和
    total = dice1 + dice2
    # 输出结果
    print(f"骰子1: {dice1}, 骰子2: {dice2}, 总和: {total}")
    return total

roll_dice()

🔍 注释:stop=7 是因为六面骰的点数是 1 到 6,所以范围是 [1, 7),即 1 到 6。randrange(1, 7) 正好满足需求。


高级技巧:确保随机性可复现

在调试或测试时,我们有时需要“固定”随机数,以便复现问题。Python 的 random 模块支持设置种子(seed),让随机数序列可预测。

import random

random.seed(42)

for i in range(3):
    num = random.randrange(1, 100)
    print(f"第 {i+1} 次随机数:{num}")

🔍 注释:random.seed(42) 设置了随机数生成器的初始状态。只要种子相同,生成的随机数序列就完全一样。


常见误区与注意事项

误区一:randrange() 包含上限值

很多人误以为 randrange(1, 10) 会生成 10。其实不会!

import random

result = random.randrange(1, 11)  # 结果在 [1, 11) 范围内,即 1 到 10
print(result)  # 输出可能是 10,但不会超过 10

✅ 正确理解:stop 是“不包含”的。

误区二:步长为 0 或负数

step 不能为 0,也不能为负数(除非 start > stop)。

import random


negative_step = random.randrange(10, 1, -1)  # 生成 10 到 2 之间的随机数(步长 -1)
print(f"负步长随机数:{negative_step}")

🔍 注释:当 step 为负时,start 必须大于 stop,否则会报错。


与其他随机函数的对比

函数 说明 是否包含上限 适用场景
random.randrange(start, stop, step) 生成指定范围内的随机整数 不包含 灵活控制范围和步长
random.randint(a, b) 生成 a 到 b 之间的随机整数 包含 简单场景,如掷骰子
random.choice(list) 从列表中随机选择一个元素 —— 从集合中取值
random.uniform(a, b) 生成 a 到 b 之间的随机浮点数 不包含 需要小数的场景

📌 建议:如果需要控制步长或生成特定序列的随机数,优先使用 randrange()


总结与建议

通过本文,我们系统学习了 Python3 randrange() 函数 的核心用法。它不仅支持基础的范围生成,还通过 step 参数提供了强大的灵活性,尤其适合需要“跳着取数”的场景。

  • 使用 randrange() 时,牢记“不包含上限”的规则;
  • 合理利用 step 参数,可以高效生成偶数、奇数或等差数列中的随机数;
  • 在测试中,使用 random.seed() 可确保结果可复现;
  • 与其他随机函数相比,randrange() 更适合需要精确控制范围的场景。

无论是做小游戏、数据模拟,还是编写自动化脚本,掌握 randrange() 都会让你的代码更生动、更智能。

下一次当你需要“随机抽一个数”时,别再用 random.randint() 了——试试 randrange(),它可能正是你想要的那把钥匙。