История изменений
Исправление Virtuos86, (текущая версия) :
Поскольку в условиях задачи не указано, нужно ли стремиться к наиболее равномерному распределению длин отрезков по диапазону, то вот решение в лоб:
from random import choice
length = 1000
min_length = 1
max_length = 30
n = 120
list_of_lengths = []
sum_lengths = 0
while n > 0:
n -= 1
l = choice(xrange(min_length, max_length + 1))
sum_lengths += l
list_of_lengths.append(l)
remainder = length - sum_lengths - (n - 1)
if remainder < max_length:
max_length = remainder
print list_of_lengths
Исправление Virtuos86, :
Поскольку в условиях задачи не указано, нужно ли стремиться к наиболее равномерному распределению длин отрезков по диапазону, то вот решение в лоб:
from random import choice
length = 1000
min_length = 1
max_length = 30
n = 120
list_of_lengths = []
sum_lengths = 0
while n > 0:
n -= 1
l = choice(xrange(min_length, max_length + 1))
sum_lengths += l
list_of_lengths.append(l)
remainder = length - sum_lengths - (n - 1)
if 0 < remainder < max_length:
max_length = remainder
elif remainder == 0:
for i in xrange(n):
list_of_lengths.append(min_length)
break
print list_of_lengths
Исходная версия Virtuos86, :
Поскольку в условиях задачи не указано, нужно ли стремиться к наиболее равномерному распределению длин отрезков по диапазону, то вот решение в лоб:
from random import choice
length = 1000
min_length = 1
max_length = 30
n = 120
list_of_lengths = []
sum_lengths = 0
while n > 0:
n -= 1
l = choice(xrange(min_length, max_length + 1))
sum_lengths += l
list_of_lengths.append(l)
remainder = length - sum_lengths - (n - 1)
if 0 < remainder < max_length:
max_length = remainder
elif remainder == 0:
for i in xrange(n):
list_of_lengths.append(1)
break
print list_of_lengths