Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
0 beğenilme 0 beğenilmeme
1.3k kez görüntülendi

Soru: 0<n<10 bir rakam olmak üzere n girdisi için palindromik sayılardan oluşan

1

121

12321

12(n1)n(n1)21

çıktısını oluşturacak programı yazınız.

Açıklama: İlk satıra n = int(input) yazarak başlayabilirsiniz. Ayrıca bir örnek verecek olarak, n=4 tam sayı girdisi için çıktı şu şekilde olmalıdır:

1
121
12321
1234321

 

Veri Bilimi kategorisinde (2.6k puan) tarafından  | 1.3k kez görüntülendi

3 Cevaplar

1 beğenilme 0 beğenilmeme
En İyi Cevap
def hesapla(n):
     a = [[i for i in range(1,k)] for k in range(2,n+2)]
     b = [x[:-1] + x[::-1] for x in a]
     return "\n".join("".join(str(i) for i in sira) for sira in b)

print(hesapla(6))

 

Duzenleme sonrasi : Asagidaki cozum python 3.9.4 de calisiyor. @lokman,gokce nin uyarisi uzerine farkettik.

 

Soyle bir cozumum var

def hesapla(n):
     a = [[i for i in range(1,k)] for k in range(2,n+2)]
     b = [(y:=x + x[::-1],y.pop(len(x)))[0] for x in a]
     return "\n".join("".join(str(i) for i in sira) for sira in b)

print(hesapla(6)) 

######SONUC
#1
#121
#12321
#1234321
#123454321
#12345654321

Burada x[::-1] , y:=x  ve .pop ifadelerini kullandik.

x[::-1] bir listenin tersini geri dondurur (pythonda negatif indexlerin kullanilabilmesi ve indeks olarak aralik verilebildigini unutmayalim)

y:=x sayesinde bir expressionda (mesela tuple), y yi tanimlayip daha sonra ayni expresson icinde kendisine referans gosterebiliyorum. Bu operatorun adi walrus operatoru

list.pop methodu ise bir listenin verilen indeksini siliyor

muhtemelen listeleri birlestirmek icin + yerine list.extend methodunun kullanilmasi gerekir

(1.6k puan) tarafından 
tarafından seçilmiş

Google Colab'da (şu anki sürüm Python 3.9) çalıştırdığımda b'nin tanımlanması ile ilgili SyntaxError: invalid syntax şeklinde hata veriyor. Kodu gözden geçilebilir miyiz

evet colab de calismadi. Benim bilgisayarimda python 3.9.4 icin calisiyor kod. eski python da calisan versiyonunu ekleyecegim simdi. Tesekurler
1 beğenilme 0 beğenilmeme

2. Çözüm: Pür matematik kullanarak

for i in range(1,int(input())+1):
    print(int((10**i-1)/9)**2)

yazmak yeterlidir. Matematiksel açıklaması şu şekildedir:

12=1

112=121

1112=12321

1111111112=12345678987654321 olduğundan n tane 1 rakamından oluşan sayıya Sn=111 diyelim. Sonlu geometrik toplam ile

Sn=1+10+102++10n1=10n19

olduğundan istenen değer S2n=(10n19)2

olur.

(2.6k puan) tarafından 
tarafından düzenlendi
bence en guzel cozum bu
Başka çözümler verildiğinde, kendi çözümümü en iyi olarak seçmek istemiyorum :) Elinize emeğinize sağlık
0 beğenilme 0 beğenilmeme

3. Çözüm: Listeleri birleştirme (uç uca ekleme) yapalım:

for i in range(1, int(input())+1):
    print(*(list(range(1, i)) + list(range(i, 0, -1))), sep="")

Burada * (asteriks) sembolünün görevi, listelerin birleşiminden köşeli parantezi kaldırıyor. sep = "" kodu ise listenin terimleri arasındaki boşlukları kaldırıyor.

Örneğin girdi olarak 3 yazılınca i[1,4) aralığındaki tam sayılarda değer alarak for döngüsü çalışmaya başlıyor.

i=1 için ilk liste 1 verir, ikinci liste birşey vermez. Birleşimleri 1 olur.

 i=2 için ilk liste 12 verir, ikinci liste 1 verir. Birleşimleri 121 olur.

 i=3 için ilk liste 123 verir, ikinci liste 21 verir. Birleşimleri 12321 olur.

(2.6k puan) tarafından 
20,315 soru
21,870 cevap
73,591 yorum
2,883,063 kullanıcı