Сгенерировать n - 1 случайное число, добавить к ним 0 и 100. Отсортировать. Сосчитать разницы между соседями - это ответ.
[21, 98, 24] # случайные числа в интервале [0, 100]
[21, 98, 24, 0, 100] # добавлены края диапазона
[0, 21, 24, 98, 100] # после сортировки
[ 21, 3, 74, 2 ] # разности между соседями, их сумма равна 100
Код:
import random
n = 4
target = 100
samples = [random.randrange(target + 1) for _ in range(n - 1)] + [0, target]
samples.sort()
probs = [b - a for a, b in zip(samples[:-1], samples[1:])]
print(sum(probs), '=', ' + '.join(map(str, probs)))
$ python random-percents.py
100 = 23 + 42 + 29 + 6
$ python random-percents.py
100 = 4 + 49 + 20 + 27
$ python random-percents.py
100 = 16 + 67 + 13 + 4
$ python random-percents.py
100 = 13 + 9 + 23 + 55