Вы используете
random.choices(range(a,b+1), weights= [....], k=1) # or cum_weights
для k
из 1 и совокупности в range(a,b+1)
и желаемых весов.
См .: https://docs.python.org/3/library/random.html#random .choices
Вы должны рассчитать возможный (произвольный) весовой коэффициент, например:
import random
from collections import defaultdict
a = 8
b = 32
c = 26
# hacked distribution
w = [(i-a)**2 if i <= c else (b-i+a)**2 for i in range(a,b+1)]
d=defaultdict(int)
for i in range(a,b+1):
d[i]=0
# test for 10k numbers
for num in random.choices(range(a,b+1), weights = w, k=10000):
d[num] += 1
print(w)
print(d)
Это все еще случайно, один прогон меня получил:
# hacked distribution
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
256, 289, 196, 169, 144, 121, 100, 81, 64]
# test for 10k numbers
{8: 0, 9: 8, 10: 7, 11: 37, 12: 61, 13: 94, 14: 149, 15: 175, 16: 229,
17: 283, 18: 374, 19: 450, 20: 493, 21: 628, 22: 672, 23: 820, 24: 907,
25: 1038, 26: 1183, 27: 564, 28: 537, 29: 435, 30: 325, 31: 293, 32: 238}