7 elemanlı bir listeye; belirlenmiş bir sayıyı, toplamları belirlenen sayıya eşit olacak şekilde listeye dağıtmak

Öncelikle iyi forumlar.
7 elemanlı (7 elemanın 7’si de = 0), list_ adında bir listemiz var ve count adında integer bir değer taşıyan değişkenimiz var.
count değişkenindeki değeri, sum(list_)=count olacak şekilde “rastgele” dağıtmak istiyorum.
Dediklerimi somutlaştıracak örnekler vereyim.


Örnek:

count = 10 
list_ = [0, 0, 0, 0, 0, 0, 0]
<<< Kodlar >>>
print(list_)
# Çıktı --> [0, 3, 5, 1, 0, 1, 0] 
# 0+3+5+1+0+1+0=10 oldu. Yani count değişkenindeki değere eşit oldu

Başka örnek:

count= 6
list_ = [0, 0, 0, 0, 0, 0, 0]
<<< Kodlar >>>
print(list_)
# Çıktı --> [2, 0, 0, 1, 3, 0, 0]
# 2+0+0+1+3+0+0=6 oldu. Yani count değişkenindeki değere eşit oldu.

Bir başka örnek:

count= 17
list_ = [0, 0, 0, 0, 0, 0, 0]
<<< Kodlar >>>
print(list_)
# Çıktı --> [6, 3, 2, 0, 3, 0, 3]
# 6+3+2+0+3+0+3 oldu. Yani count değişkenindeki değere eşit oldu.

Bunu nasıl yapabilirim ?
Bir telegram grubundan aynen şöyle bir yanıt almıştım:

import random
def random_ints_with_sum(n):
    while n > 0:
        r = random.randint(0, n)
        yield r
        n -= r
print(list(random_ints_with_sum(10)))

Bu fonksiyon, istediğim listeyi hemen hemen döndürüyor. Ancak dönen listenin eleman sayısı 7 değil.
Size de fikir verebilme olasılığından dolayı bunu da paylaşmak istedim.


Yardımcı olacak olan kullanıcılara şimdiden müteşekkirim.

Toplamları belirli bir sayıya eşit olacak 7 adet sayı üretmek istiyorsanız aşağıdaki basit fonksiyon işinizi görecektir

import random


def get_nums_with_sum(count, size):
	N = size      # Kaç adet sayının toplamı isteniyor?

	liste = sorted([random.randint(1,count-1) for i in range(N-1)])
	liste.insert(0, 0)
	liste.append(count)
	result = []

	for i in range(N):
		result.append(liste[i+1] - liste[i])

	return result


print(get_nums_with_sum(17, 7))  # toplamları 17 olan 7 adet sayı üret
3 Beğeni