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) 展开
最后结果要求输出是
[x,x,x,x,x,x,x,x,x,x] 这种list,但是里面的10个数是随机的,且和为60 (单个随机数的范围不应该大于60小于0) 展开
4个回答
展开全部
很简单,不用那么蠢的代码。
如果你不需要最终产生的随机数是整数的话,只需要随机产生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))
如果你不需要最终产生的随机数是整数的话,只需要随机产生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))
展开全部
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()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
```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)
// 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)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询