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
ben böyle yaptım bazı eksikleri vardır ama olsun yardım edebildiysem sevindim
sayıları bizim girmemiz değil de otomatik olarak çekmesi gerekiyor onun üzerine yoğunlaşıyorum
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))
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?
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