来自同一池的多个随机输出

问题描述 投票:0回答:1

我需要 3 个输出变量,其值从 1 到 x,我需要它们都等于 3+y。

如果我的变量被称为“A,B,C”我的代码如下:

A=1
B=1
C=1

while y>0:
    A=A+randint(0,y)
    y=y-A+1
    B=B+randint(0,y)
    y=y-B+1
    C=C+randint(0,y)
    y=y-C+1

这有一个问题,它没有给所有 3 个输出一个公平的机会,而且我也没有找到检查 x 的方法。

欢迎任何想法,即使是不完整的想法,非常感谢。

python python-3.x random spyder anaconda3
1个回答
0
投票

我想你要找的是这样的东西:

from random import randrange

def get_ints(y):
    nums = [1, 1, 1]

    # loop y times
    for _ in range(y):
        # iterate a random element
        nums[randrange(3)] += 1
    return nums

# if you want them in A, B, C
A, B, C = get_ints(100)

这应该是相同的结果:

from random import choices

def get_ints(y):
    indices = choices(range(3), k=y)
    return [indices.count(i) + 1 for i in range(3)]

A, B, C = get_ints(100)

我确定有一种方法可以在恒定时间内得到这个结果......

值得注意的是,这个分布不会有很大的差异。如果你想要那个,那么你应该使用如下方法:

def get_ints(y):
    nums = [randrange(y + 1), randrange(y + 1)]
    A = min(nums) + 1
    B = max(nums) - min(nums) + 1
    C = y - max(nums) + 1
    return A, B, C
© www.soinside.com 2019 - 2024. All rights reserved.