from random import *
def break_num2(num, count, mode="int"):
if mode == "float":
ingreds = [num / count for _ in range(count)]
elif mode == "int":
ingreds = [num // count for _ in range(count)]
while count:
i1 = randrange(len(ingreds))
i2 = (i1 + 1) % len(ingreds)
if mode == "float":
n = uniform(0, ingreds[i1])
elif mode == "int":
n = randint(0, ingreds[i1])
ingreds[i1] -= n
ingreds[i2] += n
count -= 1
if sum(ingreds) < num:
ingreds.append(num - sum(ingreds))
return ingreds
x = break_num2(50, 4)
y = break_num2(50, 4, "float")
print(x, sum(x), y, sum(y))
This prints for instance:
[12, 3, 4, 29, 2] 50 [0.8403666071897256, 36.636786293337956, 12.5, 0.02284709947231712] 50.0