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

如何修改Python随机数生成代码,实现同一数值间隔5个其他数后重复?

解决方案

要满足你提出的两个规则(相邻数不重复、必须用完其他5个数才能重复),最直接的实现方式是先生成110-115的随机排列,然后重复这个排列直到凑够19个元素。这种方式天然符合规则:

  • 随机排列中的元素都是唯一的,因此相邻元素必然不同;
  • 只有完整遍历完6个不同的数之后,才会再次出现之前的数,满足“用完其他5个数才可重复”的要求。

修改后的代码如下:

import random

# 生成110到115的候选数列表
candidates = list(range(110, 116))
# 随机打乱候选数顺序
random.shuffle(candidates)

# 重复打乱后的列表,取前19个元素
randomlist = (candidates * 4)[:19]

# 输出结果,每个元素占一行
print(*randomlist, sep="\n")

代码说明:

  • list(range(110, 116)):生成包含110、111、112、113、114、115的列表;
  • random.shuffle(candidates):随机打乱候选数的顺序,确保每次生成的序列开头不同;
  • (candidates * 4)[:19]:将打乱后的列表重复4次(总长度24),然后截取前19个元素,刚好满足数量要求;
  • 输出部分保留了你原来的格式,每个数单独一行。

如果你需要更动态的生成方式(比如不依赖重复固定序列),也可以用以下方式维护可用候选池:

import random
from collections import deque

randomlist = []
candidates = list(range(110, 116))
# 初始化可用池为所有候选数
available = candidates.copy()
# 冷却队列,用于存放刚用过的数,满5个后放回可用池
cooling = deque(maxlen=5)

for _ in range(19):
    # 随机选一个可用数
    num = random.choice(available)
    randomlist.append(num)
    # 将选中的数移到冷却队列
    available.remove(num)
    cooling.append(num)
    # 当冷却队列满时,把最早的数放回可用池
    if len(cooling) == 5:
        available.append(cooling.popleft())

print(*randomlist, sep="\n")

这种方式会动态维护可用的数,每次只能从还没进入冷却的数里选,确保满足两个规则,且序列的随机性更强(不会完全重复固定排列)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:01:15