我知道怎么产生随机整数,也知道怎么产生和为固定值,但真不知道这个怎么搞
如有帮助,望点击我回答右上角【采纳】按钮支持一下。
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
说人话就是:
那么代码就很好写了
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)