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

如何生成15个5-20区间且总和固定为227的随机数?

解决随机数生成与总和控制的问题

首先,咱们得先理清楚核心需求:生成15个5到20之间的整数,且它们的总和恰好是227。我会先拆解这个问题的逻辑,再把它整合到你的turtle绘图代码里。

思路拆解

先算个基础账:15个数每个至少是5,总和最低是15*5=75,而目标总和是227,所以我们需要额外分配227-75=152的“增量”到这15个数上。每个数最多能加20-5=15(因为上限是20),15个数最多能加15*15=225,152远小于225,所以这个目标完全可行。

具体生成步骤:

  • 先创建一个列表,每个元素初始值为5(满足最小值要求)
  • 计算需要额外分配的总量:remaining = 227 - sum(初始列表)
  • 循环处理每个元素:给当前元素随机加一个值,这个值的范围是0到min(15, remaining)(既不超过单个元素的最大增量,也不超过剩余需要分配的总量)
  • 直到剩余分配量为0,就得到了符合要求的15个数

整合到你的绘图代码里

下面是修改后的完整代码,我把随机数生成逻辑加了进去,并且用这些随机数来控制画笔前进的长度(你也可以根据需求调整使用场景):

import turtle
import random

turtle.bgcolor("black")
t = turtle.Pen()
t.width(4)
colours = ["yellow", "orange", "red"]

# 生成15个5-20之间、总和为227的随机数
def generate_target_numbers():
    numbers = [5] * 15
    remaining = 227 - sum(numbers)
    for i in range(len(numbers)):
        if remaining <= 0:
            break
        # 每个数最多能加15(20-5),同时不能超过剩余需要分配的量
        add = random.randint(0, min(15, remaining))
        numbers[i] += add
        remaining -= add
    # 兜底逻辑:确保剩余量全部分配完(理论上不会触发,但做个保障)
    while remaining > 0:
        idx = random.randint(0, 14)
        if numbers[idx] < 20:
            numbers[idx] += 1
            remaining -= 1
    return numbers

# 获取符合要求的随机数列表
lengths = generate_target_numbers()

# 可选:验证总和与范围(调试用)
print(f"总和:{sum(lengths)}")
print(f"最小值:{min(lengths)},最大值:{max(lengths)}")

# 修改绘图逻辑,用生成的随机数控制前进长度
for i in range(15):  # 循环15次对应15个随机数
    t.pencolor(colours[random.randint(0,2)])
    t.forward(lengths[i])
    t.back(lengths[i])
    t.left(24)  # 15*24=360,保证循环结束后画笔回到初始方向

代码说明

  • generate_target_numbers()函数专门负责生成符合要求的随机数,先初始化基础值,再逐步分配增量,最后还有兜底逻辑确保剩余量全部分配完
  • 我把原代码的60次循环改成了15次,对应15个随机数,同时调整了左转角度为24度(保证最后画笔回到初始方向)
  • 你可以根据实际需求调整随机数的使用方式,比如改变画笔宽度、颜色切换频率等等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:55:30