当前位置:首页>python>抽奖、验证码怎么实现?靠 Python 随机数

抽奖、验证码怎么实现?靠 Python 随机数

  • 2026-10-11 06:13:37
抽奖、验证码怎么实现?靠 Python 随机数

做小游戏、设计抽奖软件、甚至生成手机验证码,都离不开一个核心功能——随机数!

在 Python 里,专门处理随机数的就是自带的 random 模块。很多家长和孩子刚接触时,常被 randint、randrange、choice、sample 这些名字长得很像的函数搞混。

今天咱们就用最通俗的大白话,把 random 库最常用的 8 个神仙函数 一网打尽,建议收藏备用!

❓ 揭秘:电脑生成的随机数,其实是“假的”?

在动手写代码前,先告诉娃一个冷知识:计算机里产生的“随机数”其实叫伪随机数。

因为真正意义上的随机是无法被预测的,而电脑是依靠一套严格的数学公式算出来的。只要给电脑输入的“起始起点”(随机种子)一样,它算出来的“随机数”就会完全一模一样! 默认情况下,电脑会用“当前系统时间”作为种子,所以我们感觉每次都是随机的。

🔑 1. 操控随机命运的钥匙:random.seed()

  • 干啥用的:用来固定随机种子。

  • 有什么用:如果你想让每次运行程序产生的“随机数”保持一模一样(比如在游戏测试、做实验时),就可以手动设置种子!

🔢 2. 抓取随机整数:randint() vs randrange()

这两个函数都是用来生成随机整数的,但有一个非常关键的区别!

① randint(start, stop):包含头也包含尾(双闭区间)

最符合人类直觉!比如 randint(1, 6),就像掷骰子,1 和 6 都有可能投出来。

② randrange(start, stop, step):包含头不包含尾,还能加步长

它的规则和 Python 的 range() 一模一样,包头不包尾,而且还能设置跳跃间隔(步长)。

📌 辨析小卡片

函数名是否包含末尾数字是否支持步长
randint(a, b)包含b❌ 不支持(默认一步1个)
randrange(a, b, step)不包含b✅ 支持(如只抽取偶数/奇数)

🎁 3. 抽奖与选词:choice()、choices() 与 sample()

如果要从列表、字符串或者元组等数据里“抽奖”,用这三个函数就对了。

① choice(seq):单抽(只选1个)

从指定的序列里随机拎一个元素出来。

names = ['小明', '小红', '小刚']print(random.choice(names)) # 随机返回其中某一个人名

② choices(seq, weights, k):连抽(有放回抽样 + 氪金概率)

  • 放回抽样:拿完一个放回去,下一次还能抽到它(可能会抽到重复元素)。

  • 设置权重 (weights):可以给不同选项设置概率!比如爆卡率、SSR概率。

③ sample(seq, k):不重复抽样(无放回抽样)

  • 无放回抽样:就像从箱子里抓阄,拿出一个少一个,绝对不会重复!

  • ⚠️ 避坑点:要求的抽取数量 k不能大于列表本身的长度,否则会报错。

📌 抽奖三兄弟对比表

函数名抽几个?抽取结果会重复吗?适合场景
choice只抽 1 个/决定今天吃什么、选谁回答问题
choices自定义 k 个会(有放回,可设概率)游戏卡池抽卡、模拟掷骰子多次
sample自定义 k 个不会(无放回,不重复)抽奖一二三等奖、发牌

🃏 4. 自动洗牌:shuffle()

  • 干啥用的:直接把一个列表里的元素顺序列打乱(就像扑克牌洗牌一样)。

  • ⚠️ 注意事项:只能打乱可变序列(如列表 list),不能用于元组或字符串!并且它会直接修改原列表,没有返回值。

pokers = ['红桃A', '黑桃K', '方块5', '梅花Q']random.shuffle(pokers)print(pokers) # 原列表的顺序已经被随机打乱了!

📐 5. 生成小数与概率:random() vs uniform()

如果需要用到小数(比如命中率、概率计算、物理碰撞模拟),就需要用到它们。

① random.random():生成 0 到 1 之间的小数

无需参数,专门返回 [0.0, 1.0) 之间的随机浮点数。

print(random.random()) # 例如:0.654321

② uniform(a, b):指定范围的小数

可以自由设置上限和下限(包含 a 和 b),在这个范围里随机找一个浮点数。

📝 终极复习小结

学完这 8 个函数,孩子写小程序、做微型游戏(如贪吃蛇位置生成、猜数字游戏、卡牌对战)就完全够用了!

  1. 控制种子:seed() —— 锁定随机结果。

  2. 选整数:randint()(包头包尾)/ randrange()(包头不包尾)。

  3. 选元素:choice()(抽1个)/ choices()(重复抽+设概率)/ sample()(不重复抽)。

  4. 打乱顺序:shuffle() —— 列表洗牌。

  5. 生成小数:random()(0到1)/ uniform()(指定范围)。

最新文章

随机文章