Şanslı numaralar programı

Merhabalar, böyle bir program yazmak istiyorum;

Şanslı numaralar programı. Program öncelikle 1 den baslayıp n sayısına kadar bir sayı dizisi üretir (s=[1,2,…,n]). İlk döngüde ilk sayıyı atlayıp ikinci sayıları atacak. İkinci döngüde iki sayıyı muhafaza edip üçüncü sayıları atacak. Üçüncü döngüde ilk üç sayıyı tutup dordüncüyü atacak. En son atacak sayı kalmayıncaya kadar devam edecek. En so atacak sayı kalmayınca kalan sayılar şanslı sayılar olacak. Aşağıda n=22 icin yapılmış örnek var:
Original sayı dizisi: n=22 için.
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
İlk turda ikinci elemanları atıyoruz, kalanlar: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
İkinci turda üçüncü elemanları atıyoruz, kalanlar : [1, 3, 7, 9, 13, 15, 19, 21]
Uçüncü tur kalanlar: [1, 3, 7, 13, 15, 19]
Dordüncü tur: [1, 3, 7, 13, 19]
Sonraki turda altıncı elemanı atmamız lazımdı, altıncı eleman kalmadı.
Sonucta şanslı numaralar:
Output>>> Lucky numbers are [1, 3, 7, 13, 19]

nasıl yapacağımı bir türlü kafamda kuramadım. Yardımcı olur musunuz?

While döngüsü içinde for döngüsü kullanmanız gerekir. While döngüsü ile turları belirleyin. For döngüsünde listenin uzunluğunu bir range fonksiyonuyla getirin, eğer sayı tur sayısının bir fazlasına bölünüyorsa çıkartın. While döngüsünde bir kontrol yapın: Eğer tur sayısı liste uzunluğundan büyükse döngüyü kırsın.

Ben bakınca çok karmaşık görünüyor. Ancak bir fikir vereceğini düşünüyorum.

1 Beğeni

Burada ayni islemden mi bahsediyoruz? Uc degisik sekilde anlatilmis cunku.

  1. Liste ve n alip listeden n. elemanlari atacak fonksiyon (yukardaki islem)
  2. Bunu n=2, n=3, n=4… olacak sekilde zincirleyen fonksiyon

Fonksiyonel ornek, ciddiye almayiniz:

  1. throw_every_nth = lambda n, xs: list(map(lambda i_x: i_x[1], filter(lambda i_x: (i_x[0]+1) % n != 0, enumerate(xs))))

  2. lucky = lambda limit: functools.reduce(lambda xs, n: throw_every_nth(n, xs), range(2, limit + 1), range(1, limit + 1))

1 Beğeni