Random konusu ile lstenilen liste


#1

0-20 arası rastgele 1000 sayı oluşturucaz.Bu sayıların 3’ er tanesinin arka arkaya yazılmasıyla oluşturulabilecek birbirinden farklı en büyük 10 sayıyı bulan python programı nasıl yapabiliriz acaba ?

ben aşadaki yere kadar gelebildim, 3’ er tanesinin arka arkaya yazılmasıyla oluşturulabilecek birbirinden farklı en büyük 10 sayıyı nasıl bulup yazdırıcaz çözemedim :

import random
a=[ ]
for i in range(1000):
x=random.randint(1,20)
a.append(x)
print(a)


#3

Bunun cevabını çok merak ettim. Ben yaptım birşeyler ama tam olmadığı için henüz paylaşmadım.


#4

Aslında soruda bazı karmaşalar var. Bir kere 1000 tane 0 ile 20 arasında sayı üretirsen çok kez sayılar tekrar edecektir. Ve bu tekrar eden sayıları yazacaksak yöntem farklılaşır. Ama tekrar eden sayıları almayacaksak; 0 ile 21 arası sayılar elde ederiz yüksek ihtimal hepsi olur. Ve bunların içinden algoritma üretmemiz gerekli. Sorum bu…


#5

tekrar eden sayılar olabilir , 3’ er tanesinin arka arkaya yazılmasıyla birbirinden farklı en büyük 10 sayıyı kendi bulucak orada karışıyor biraz :slight_smile:


#6

Ama o zaman sürekli 20 li sayılar birleşerek aynı büyük sayıları oluşturmaz mı? Belki içlerinden bir tanesi farklı olabilir ama bu programı yazmaktaki asıl amacı merak ettim ben :slight_smile:


#7

birbirinden farklı istiyor ama o yüzden mesela oluşturduk diyelim 1000 sayıyı arka arkaya 20 20 20 geldi 202020 sayısı oldu. arka arkaya 20 20 19 geldi 202019 sayısı oldu ama 202020 202020 bu ikisni alamaz çünkü aynısı


#8
import random
liste=[]
for i in range(0,1000): #1000 kere
    rastgele=random.randint(0,20) # 0-20 arası sayı üretiyoruz.
    liste.append(rastgele) # listeye bu sayıları ekliyoruz.
liste.sort() #döngünden sonra listeyi küçükten büyüğe sıralıyoruz.
başka_liste=[] # aşağıdaki yanyana dizilecek 3 sayı bölümünü bu listeye atacağız.
for k in range(0,500): # BURASI!
    seçilenler=random.sample(liste,3) #liste adlı değişkenimizden 3 tane rastgele sayı çektik.
    kar_diz=""
    for l in seçilenler: # burada o sayıları birleştirmek için döngü kurduk.
        string=str(l)
        kar_diz+=string
    sayı_oldu=int(kar_diz) #3 adet sayıyı yanyana birleştirip sayıya çevirdik.
    if not sayı_oldu in başka_liste:
        başka_liste.append(sayı_oldu)  # sonra, başka listeye attık.
    else:
        continue

başka_liste.sort() # yeni oluşturulan listeyi de sıralamaya tabi tuttuk.
for m in range(1,11): # yine döngü kurduk.
    print(başka_liste[-m]) # ve sonuç olarak tersten, en büyük 10 sayıyı çıktı olarak veriyoruzzzzz.

Böyle bir şey yaptım. Düzeltmeler uygulayacağım. Önce çıktı doğru şeyler veriyor mu kontrol etmeliyim.
Edit : Sanırım kontrollerimden sonra elde ettiğim sonuç bu. Sizin de gördüğünüz bir aksaklık olursa yazmanız beni mutlu eder… :slight_smile: Kusurlu bulduğum tarafı ise, 3 tane sayının rastgele seçiliyor olması. Ve bu rastgele seçilen sayıları ’ BURASI! ’ olarak not düştüğüm kod satırından ayarlayabiliriz. Tam istenen sonucu veremedim ama herhalde sonuca yakın gibi…


#9

teşekkürler sonucu hemen hemen tam istediğim gibi . öncelikle o oluşturduğumuz 1000 sayıyıda ekrana yazdırıbilirmiyiz

image

bunun başına yani nereye print ekleyelim


#10

En sonuna girintisiz şekilde ekleyebilirsiniz. liste adlı değişken üzerinde değişiklik yapmadığımız için, print(liste) yazılabilir sanırım.


#11

teşekkürler yardımlarınız için :slight_smile: :+1::+1: