You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何生成12到77之间且末位不为1和8的两位数字

Python 风格的目标随机数实现方案

需求拆解

需要生成12~77闭区间内的整数,排除个位为1、8的所有数值。

推荐实现方式

方案1:预生成合法数池(最常用,推荐)

如果有多次生成的需求,优先选择该方案,预生成一次数池后后续取数都是O(1)开销,代码简洁易维护:

import random

# 用列表推导式生成所有符合规则的合法数值池
valid_nums = [n for n in range(12, 78) if n % 10 not in {1, 8}]

# 生成1个随机数
single_num = random.choice(valid_nums)

# 生成k个不重复的随机数(k不能超过数池总长度)
k = 3
multi_nums = random.sample(valid_nums, k=k)

优势:

  • 列表推导式是Python原生的地道写法,逻辑一目了然,没有额外理解成本
  • 无需自己写while循环做判断,避免写出死循环或者判断条件错误的问题
  • 多次生成场景下性能远高于每次随机再判断的实现

方案2:数位构造法(性能最优)

如果是单次生成或者极端追求性能,可以选择按数位直接构造,完全没有遍历和无效随机的开销:

import random

# 随机生成十位:取值范围1~7
ten = random.randint(1, 7)
# 根据十位的边界限制生成合法的个位
if ten == 1:
    # 十位为1时最小值是12,排除个位0、1、8
    unit = random.choice([2,3,4,5,6,7,9])
elif ten == 7:
    # 十位为7时最大值是77,排除个位1、8
    unit = random.choice([0,2,3,4,5,6,7])
else:
    # 十位为2~6时,仅排除个位1、8
    unit = random.choice([0,2,3,4,5,6,7,9])

random_num = ten * 10 + unit

优势:

  • 每次生成的数值必然合法,没有任何无效重试的开销
  • 无需遍历生成数池,内存占用为0,适合内存受限的场景

内容的提问来源于stack exchange,提问作者Oktarinet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:15:03