我需要 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 的方法。
欢迎任何想法,即使是不完整的想法,非常感谢。
我想你要找的是这样的东西:
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