python 如何生成和为固定值的N个随机数?

例如我需要生成一组随机数,要求所有随机数的和为60,随机数的个数为10个最后结果要求输出是[x,x,x,x,x,x,x,x,x,x]这种list,但是里面的10个数是随机... 例如 我需要生成一组随机数,要求所有随机数的和为 60,随机数的个数为10个
最后结果要求输出是
[x,x,x,x,x,x,x,x,x,x] 这种list,但是里面的10个数是随机的,且和为60 (单个随机数的范围不应该大于60小于0)
展开
 我来答
昱SUROU1a
2019-03-31 · TA获得超过1615个赞
知道小有建树答主
回答量:466
采纳率:33%
帮助的人:166万
展开全部
很简单,不用那么蠢的代码。
如果你不需要最终产生的随机数是整数的话,只需要随机产生10个随机数,然后计算它们的合是多少,然后算下这个合和60之间的比例,把所有的随机数乘以一个比例就可以了。给你两个方法参考,都是可以的。见方法1,方法2的代码。
如果你需要最终产生整数的话,那就随机产生9个随机数,在算比例的时候变一下分母分子,然后最后用原list除以比例的时候用整除就可以了。这样9个数全是整数,然后算一下这九个数和60的差值,把差值补充进去做为第十个数就可以了。见方法1'和方法2’。
import numpy as np
#方法1:产生0-1的10个随机浮点数,然后乘以比例达到最终合为60
x0=np.random.rand(10)
ratio=60/sum(x0)
x1=x0*ratio
#方法2:产生10个0-60之间的10个随机整数,然后乘以比例达到最终合为60
y0=np.random.randint(60,size=10)
ratio=60/sum(y0)
y1=y0*ratio
#方法1':产生0-1的9个随机浮点数,然后除以比例达到9个数为整数,最后补充一个60和这个
#list的和的差值,就可以了。
x0=np.random.rand(9)
ratio=sum(x0)/60
x1=x0//ratio
x1=x1.tolist()
x1.append(60-sum(x1))
#方法2':产生10个0-60之间的随机整数,然后除以比例达到9个数为整数,最后补充一个60和这个
#list的和的差值,就可以了。
y0=np.random.randint(60,size=9)
ratio=sum(y0)/60
y1=y0//ratio
y1=y1.tolist()
y1.append(60-sum(y1))
百科知识天天学
2018-08-06 · 每天学一点,一年大不同!
百科知识天天学
采纳数:15 获赞数:48

向TA提问 私信TA
展开全部

1、如果是从60个数字中随机产生10个数字,10个数字不重复,在(0,60)区间的10个数之和不可能等于60,故只能考虑10个数字重复的情况

2、如果10个数字按可重复来考虑,就是从区间(0,60)生成10个数,相加和等于60的,放入列表list

3、不过(0,60)区间比较大,要求和等于60又比较小,所以计算机遍历需要的时间比较长,代码如下:

#python3

import random
import time
iRandom = []
listRandom =[]
def main():

    n1 = random.randint(0,60)
    n2 = random.randint(0, 60)
    n3 = random.randint(0, 60)
    n4 = random.randint(0, 60)
    n5 = random.randint(0, 60)
    n6 = random.randint(0, 60)
    n7 = random.randint(0, 60)
    n8 = random.randint(0, 60)
    n9 = random.randint(0, 60)
    n10 = random.randint(0, 60)
    if (n1+n2+n3+n4+n5+n6+n7+n8+n9+n10) == 60:
        listRandom = n1,n2,n3,n4,n5,n6,n7,n8,n9,n10
        iRandom.append(listRandom)
        print(iRandom)
    else: print('还没有找到')

def do_while():
    while True:
       main()
       time.sleep(0.0000001)


do_while()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
laiyx
2021-06-02
知道答主
回答量:2
采纳率:0%
帮助的人:1674
展开全部
```java
// FileName: HelloWorld.java
public class HelloWorld {
// Java 入口程序,程序从此入口
public static void main(String[] args) {
System.out.println("Hello,World!"); // 向控制台打印一条语句
}
}
```
import randomN = 10SUM = 60p = sorted(random.sample(range(SUM),N-1)+[0,SUM])q = [ p[i+1]-p[i] for i in range(N)]print(q)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-07-14
展开全部
import random
lst=[]
n=60
for i in range(10):
    lst.append(random.randint(0,n))
    n-=lst[i]
print(lst)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式