如何用Python产生和为固定值的3个随机整数,并生成一个列表

我知道怎么产生随机整数,也知道怎么产生和为固定值,但真不知道这个怎么搞

img

如有帮助,望点击我回答右上角【采纳】按钮支持一下。

import random
def randomNums(maxValue, num):
    maxValue = int(maxValue)
    rand_list = random.sample(range(1,maxValue), k=num-1) # 在1~maxValue之间,采集3个数据
    rand_list.append(0)   # 加上数据开头
    rand_list.append(maxValue)
    rand_list = sorted(rand_list)
    lists = [ rand_list[i]-rand_list[i-1] for i in range(1, len(rand_list)) ] # 列表推导式,计算列表中每两个数之间的间隔
    return lists
print('测试结果',randomNums(100,3))

import random 
random.seed(1)
N=1000
b=[random.sample(range(1,N),3) for i in range(5*N)]#产生随机整数列表嵌套
a=[x for x in b if sum(x)==N]#选出和为固定值的列表
print(a)

#[[292, 152, 556], [580, 87, 333], [38, 639, 323], [400, 387, 213]]

和为固定值的3个随机整数

假设固定值为100,则随机数A、B、C满足以下条件

A+B+C = 100

0 <= A <=100
0 <=B <=100-A
0 <=C = 100-A-B

说人话就是:

  1. A的随机范围是0~100
  2. B的随机范围是0~(100-A)
  3. 因为和是固定值 C不随机,C=(100-A-B)

那么代码就很好写了

import random


def f(MAX):
    """返回和为MAX的三个随机整数"""
    MINI = 0
    A = random.randint(MINI, MAX)
    B = random.randint(MINI, MAX - A)
    C = MAX - A - B

    assert A + B + C == MAX
    return [A, B, C]


print(f(1))  # 返回和为1的三个随机整数,并组成列表
print(f(2))  # 返回和为2的三个随机整数,并组成列表


import random

# 暂定1000以内的整数,和为100的列表
new_li = []
while True:
    temp_li = random.sample(range(1000), 3)
    if sum(temp_li) == 100:
        new_li = temp_li
        break
print(new_li)