Короче говоря, ваше четвертое значение не случайно. Таким образом, вы можете сгенерировать первые два и вычислить сумму. Затем сгенерируйте третий в диапазоне этой суммы. Четвертое значение - это разница. Вы также можете работать с общей длиной или половиной длины, которую вы разбили случайным образом.
import random
# option1: random 1st and 2nd, 3rd splits total, fourth is difference
rv1 = random.uniform(1, 5)
rv2 = random.uniform(1, 5)
sumOfFirst2 = rv1 + rv2
rv3 = random.uniform(1, sumOfFirst2-1)
rv4 = sumOfFirst2 - rv3
print("Option1:")
print(rv1,rv2,rv1+rv2)
print(rv3,rv4,rv3+rv4)
# option 2: random total length, split each half randomly
totalLength = random.uniform(4,20)
sumOfFirst2 = totalLength/2
rv1 = random.uniform(1,sumOfFirst2-1)
rv2 = sumOfFirst2 - rv1
rv3 = random.uniform(1,sumOfFirst2-1)
rv4 = sumOfFirst2 - rv3
print("Option2:")
print(rv1,rv2,rv1+rv2)
print(rv3,rv4,rv3+rv4)
# option 3: random half length, split each side
sumOfFirst2 = random.uniform(2,10)
rv1 = random.uniform(1,sumOfFirst2-1)
rv2 = sumOfFirst2 - rv1
rv3 = random.uniform(1,sumOfFirst2-1)
rv4 = sumOfFirst2 - rv3
print("Option3:")
print(rv1,rv2,rv1+rv2)
print(rv3,rv4,rv3+rv4)
# option 4: random extermities, random sum of center parts then split center
rv1 = random.uniform(1,5)
rv4 = random.uniform(1,5)
center = random.uniform(2,10)
totalLength = center+rv1+rv4
rv2 = totalLength/2 - rv1
rv3 = totalLength/2 - rv4
print("Option4:")
print(rv1,rv2,rv1+rv2)
print(rv3,rv4,rv3+rv4)
output:
Option1:
3.8733926704150394 1.2002268887772458 5.073619559192285
3.840231922558826 1.2333876366334593 5.073619559192285
Option2:
3.547962226731686 1.2866434919683414 4.834605718700027
1.52708327731985 3.3075224413801774 4.834605718700027
Option3:
5.271438412416368 3.9102475112312245 9.181685923647592
2.116625606537367 7.065060317110225 9.181685923647592
Option4:
2.0745608124206196 4.236051851683254 6.310612664103874
4.163042898863589 2.1475697652402848 6.310612664103873
Если вас интересует распределение, вы можете выбрать метод, который подходит Ваши требования лучше всего.