Можно просто через random.gauss
сгенерировать 400 случайных чисел, и разложить их на 12 ячеек:
from collections import defaultdict
import random
# Сигма 1.5 подобрана так, чтобы случайные числа доходили
# до границ интервала от 0 до 12, но более-менее оставались в нем
items = [random.gauss(6, 1.5) for i in range(400)]
print(min(items), max(items))
buckets = defaultdict(int)
for item in items:
bucket_index = int(item)
if bucket_index < 0:
bucket_index = 0
elif bucket_index > 11:
bucket_index = 11
buckets[bucket_index] += 1
print(buckets)
result = [buckets[i] for i in range(12)]
print(result)
print(sum(result))
Вывод:
1.6125542288793255 11.389099737688543
defaultdict(<class 'int'>, {6: 107, 8: 25, 4: 63, 5: 97, 7: 51, 3: 45, 10: 3, 2: 3, 1: 1, 9: 4, 11: 1})
[0, 1, 3, 45, 63, 97, 107, 51, 25, 4, 3, 1]
400
Вместо подбора сигмы, можно взять максимальное и минимальное значение, разбить фактический интервал на 12 равных отрезков, и считать попадание в каждый отрезок. Но это немного усложнит проверку попадания в отрезки (придется делать настоящее сравнение с границами отрезков вместо округления до целого).