Python dizinin içinden toplam 10 olacak sayı almak

Arkadaşlar merhaba,
[43,45,40,42,48,49,46,47,41,44] böyle bir dizi var elimizde(shuffle ile karışıp geliyor girilen sayıya göre)
bir başka dizi içerisine [4,4,2] veya [2,2,2,2,2] gibi olacak yani dizi bölümü 10 olacak.
[4,4,2] çıktısı şöyle olacak mesela,
[ [ 43,45,40,42 ] , [ 48,49,46,47 ],[ 41,44 ]
bunu nasıl yapabilirim? for döngüsü çalışması gerekiyor ama çözemedm

1 Beğeni

image
ben böyle yaptım bazı eksikleri vardır ama olsun yardım edebildiysem sevindim
:slight_smile:

sayıları bizim girmemiz değil de otomatik olarak çekmesi gerekiyor onun üzerine yoğunlaşıyorum

1 Beğeni

o zaman while döngüsünü komple silip l2 listesine istediğin değerleri girebilirsin
sonuç aynı olur

şimdi aklıma geldi çekilen sayıların rastgele olabilmesi için random modülünü kullanabilirsin

1 ile liste (numbers) uzunluğu arasında rasgele bir sayı belirleyip; o kadar elemanı numberstan çıkarıp resulta (sonuç olarak verilecek liste) ekleyebilirsin. numbers da hiç sayı kalmayana kadar da bu döngüyü sürdürebilirsin. şöyleki:

def shuffler(numbers: list):
    from random import randint
    result = list()
    while len(numbers) > 0:
        result.append(list())
        rand = randint(1, len(numbers))
        for i in range(rand):
            result[-1].append(numbers.pop())
    return result


li = [43,45,40,42,48,49,46,47,41,44]
print(shuffler(li))
1 Beğeni

Aslinda gerekmiyor:

arr_take_arr = lambda arr, takes: [] if len(takes) == 0 else [arr[:takes[0]]] + arr_take_arr(arr[takes[0]:], takes[1:])

print(arr_take_arr([43,45,40,42,48,49,46,47,41,44], [4,4,2]))
print(arr_take_arr([43,45,40,42,48,49,46,47,41,44], [2,2,2,2,2]))

Otomatik?
Hangi sisteme gore?

1 Beğeni

Gönderi falan silinmedi.
import random

print("-"*50)

listem = []

sayi1 = int(input("Bir sayi giriniz: "))

ilkdeger = int(sayi1*10)

sonhali = list(range(ilkdeger, ilkdeger+10, 1))

print("Sıralı Liste ", sonhali)

sonhali = list(range(ilkdeger, ilkdeger+10))

random.shuffle(sonhali)

print("Karışık Liste ", sonhali)

buranın çıktısı;

Bir sayi giriniz: 9
Sıralı Liste [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
Karışık Liste [94, 96, 92, 91, 99, 90, 93, 95, 98, 97]

bu karışık listeyi [4,4,2], [2,2,2,2,2], [4,1,4,1] gibi toplamı 10 olacak(4-4-2=10) şekilde yeni bir dizi oluşacak.

burda li = [43,45,40,42,48,49,46,47,41,44] yazan yerde değilde girilen sayıya göre yapılan karışımdan çekmesi gerekiyor

import random

print("-"*50)

listem = []

sayi1 = int(input("Bir sayi giriniz: "))

ilkdeger = int(sayi1*10)

sonhali = list(range(ilkdeger, ilkdeger+10, 1))

print("Sıralı Liste ", sonhali)

sonhali = list(range(ilkdeger, ilkdeger+10))

random.shuffle(sonhali)

print("Karışık Liste ", sonhali)
newlist1 = sonhali[0:4]
newlist2 = sonhali[4:8]
newlist3 = sonhali[8:]


dortdortiki = []
dortdortiki.append(newlist1)
dortdortiki.append(newlist2)
dortdortiki.append(newlist3)
print("4-4-2", dortdortiki)

biraz değişik oldu ama bir dene

Elin sağlık güzel olmuş fakat, hocanın istediği her atamada farklı şekilde gelmesi.Yani [3,3,4] veya [2,2,2,2,2] yada [4,4,2] gibi dizinin elemanlarının toplamı 10 olacak şekilde istiyor.Sadece 4-4-2 yapıp o şekilde istemiyor

listem = []

sayi1 = int(input("Bir sayi giriniz: "))

ilkdeger = int(sayi1*10)

siraliListe = list(range(ilkdeger, ilkdeger+10, 1))

print("Sıralı Liste ", siraliListe)

print("-"*50)

import random

siraliListe = list(range(ilkdeger, ilkdeger+10))

karisikListe = siraliListe

random.shuffle(siraliListe)

print("Karışık Liste ", karisikListe)

bunun devamına göre.
hocanın istediği şu;
bir baska dizi olusturulacak bu dizinin elemanlari toplami 10 olacak

yani [4, 4, 2]

yani [3, 3, 4]

dizideki elemanlar rastgele olusturulacak

ve rastgele atama isleminde 1,2,3,4 gelebilir.

diyelim ki [3,3,3,1]

diyelim ki [4,4,2]

diyelim ki [2,2,2,2,2]

ben bu listelerin yazılacağı yeni listeyi yazdım ama madem öğrencisin biraz gayret göstermen de lazım. ben de öğrenme aşamasındayım yazdığım kodlar bazen uzun yada değişik olabilir.
kodu çalıştırınca şu şekilde çıktılar aldım:
[3, 1, 2, 3, 1]
[3, 4, 2, 1]
[1, 1, 3, 1, 1, 2, 1] ** bu şekilde de olur değil mi toplam sonuçta 10
[4, 1, 4, 1]
[3, 1, 1, 2, 3]

kodu bırakayım aşağıya işine yararsa diğer kodların içine eklersin.


import random
boslist = []

while sum(boslist) <= 10:
    toplam = sum(boslist)
    if toplam == 0:
        boslist.append(random.randrange(1, 5))
    elif toplam == 1:
        boslist.append(random.randrange(1, 5))
    elif toplam == 2:
        boslist.append(random.randrange(1, 5))
    elif toplam == 3:
        boslist.append(random.randrange(1, 5))
    elif toplam == 4:
        boslist.append(random.randrange(1, 5))
    elif toplam == 5:
        boslist.append(random.randrange(1, 5))
    elif toplam == 6:
        boslist.append(random.randrange(1, 5))
    elif toplam == 7:
        boslist.append(random.randrange(1, 4))
    elif toplam == 8:
        boslist.append(random.randrange(1, 3))
    elif toplam == 9:
        boslist.append(1)
    else:
        break

print(boslist)

düzenleme: kodu biraz daha sadeleştirdim.

Öncelikle üste bahsettiğin iki ifadenin birbiriyle çeliştiğini düşünüyorum.

site hakkında ufak bilgi vereyim: kodlarını backtick (ters apostrof) içerisine yazarsan düzgün görünürler. genel olarak markdown özelliklerini kullanabilirsin.
```python
kodlar buraya gelecek
```

tamam hocam teşekkür ederim bakacağım