【问题标题】:Creating a program that will generate x random values that all add to 100 [duplicate]创建一个程序,该程序将生成 x 个随机值,所有这些值都加到 100 [重复]
【发布时间】:2019-08-19 18:46:43
【问题描述】:

在python中,我正在尝试创建一个生成随机数的程序:

from random import *
x = 10
for i in range(x):
    print(randint(0, 100))

这个程序生成 10 个 0 到 100 之间的随机数,如下所示:

81
92
86
26
78
85
28
32
79
20

但正如您所见,这与我的标题不符。我希望所有这些值加起来为 100。无论如何我可以做到这一点吗?这是我想要的示例:

11
13
42
4
5
2
3
10
5
5

(在本例中,这些都是随机数)

总结一下: 有没有办法生成一组总和为一个值的随机数?

【问题讨论】:

  • 你能不能只生成 9 个值,然后再做 100 个(或任何其他值)——剩下的总和?为确保您不会先发制人,您可以在循环时逐渐减少最大数量
  • 您的“随机数”需要什么样的分布?您缺乏特异性使解决这个问题变得微不足道。根据规范,它可能会变得很棘手。

标签: python python-3.x


【解决方案1】:
import random

reqd_sum = 100
x = 10
for _ in range(x-1):
    num = random.randint(0, reqd_sum)
    reqd_sum -= num
    print(num)
print(reqd_sum)

【讨论】:

  • 65 14 19 2 0 0 0 0 0 0 这是我得到的输出。看起来不是很随机。
【解决方案2】:

一种可能的解决方案:

from random import random

x = 10

values = [random() for i in range(x)]
s = sum(values)
values = [int((i / s) * 100) for i in values]
values[-1] += 100 - sum(values) # add the remainder to 100

print('Values :', values)
print('Sum    :', sum(values))

打印(例如):

Values : [4, 14, 5, 8, 14, 20, 6, 13, 12, 4]
Sum    : 100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2021-02-22
    • 2011-07-19
    • 2014-03-20
    • 2013-01-06
    • 1970-01-01
    相关资源
    最近更新 更多