Çözüldü Python'da Örüntü Oluşturan Kod Nasıl Yazılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Blacksidemre

Kilopat
Süper Moderatör
Katılım
8 Eylül 2018
Mesajlar
6.336
Makaleler
2
Çözümler
42
Yer
İstanbul
Merhaba.

1
1 1
1 4 2
1 4 9 3
1 4 9 16 4
.
.
.
Şeklinde ilerleyen bu örüntüyü, kullanıcının belirlediği son değere kadar yazdıran bir bilgisayar programına ihtiyacım var. Örüntünün gidişi, sayıların karesinin yan yana gelmesi ile oluşuyor ve yanlarına sayıların adedi yazılıyor. Bunun kodunu R ve Python ile gösterebilir misiniz?
 
Çözüm
Kod:
n <- 5

for (i in 1:n) {
  line <- paste(rep(i, i), collapse = " ")
  line <- paste(rep(i^2, i), line)
  cat(line, "\n")
}

Python:
n = 5 // value

for i in range(1, n+1):
  line = " ".join([str(i**2) for j in range(i)])
  line = " ".join([str(i) for j in range(i)]) + " " + line
  print(line)

Yukarıdaki R, aşağıdaki Python. Böyle mi istiyorsunuz?
Python:
n = int(input(""))

for i in range(1,n+1):
    for j in range(1,i+1):
        print(j*j, end=" ")
    print(i)

Ek bir çözüm de ben paylaşayım. Ve evet ilk satır "1 1" şeklinde olmalı.
 
@Uton benim anladığım şu: Kodu çalıştıran kişi bir sınır değeri belirleyecek, misal 7. Kod da her satıra 1'den başlayıp sınır değerine kadar giden sayıların karelerini çıkartacak, satırın sonuna da o satırda kaç sayı kullanıldığını yazacak. Karesi yazılan sayı miktarı her satırda bir artacak, ta ki elde sayı kalmayana kadar. 1'den başlaması için biraz düzenledim:

Python:
value = int(input("Provide a value: "))

for i in range(1, value + 1):
    nums = [j*j for j in range(1, i+1)]
    output = " ".join(str(i) for i in nums) + " " + str(i)
    print(output)

7 için bu çıktıyı veriyor:

Kod:
Provide a value: 7
1 1
1 4 2
1 4 9 3
1 4 9 16 4
1 4 9 16 25 5
1 4 9 16 25 36 6
1 4 9 16 25 36 49 7
Her satır, satır numarası kadar sayı içeriyor. Sayılar, birinci sayı olan 1'den başlayarak ve her sayının önceki sayının karesi olarak belirlenerek, kare olarak yazılıyor değil mi? Yani, her satırın ilk sayısı 1'dir, sonraki sayılar ise sırasıyla kendilerinin karesi olmuş oluyor.

Python:
n = int(input("SDeğer: "))
for i in range(1, n+1):
nums = [j*j for j in range(1, i+1)]
output = " ".join(str(j) for j in nums) + " " + str(i)
print(output)

O zaman yazdığın kod veya benim şu örnek kod işini görebilir.


Benim ilk anladığım örüntü mantığı şu şekilde idi:

Her satırda i sayısının kaç kez yazıldığı ile i^2 sayılarının kullanılmasından oluşuyor. Her satır bir önceki satırdan bir tane daha i^2 sayısının eklenmesi ile oluşuyor.


Konu sahibi hocam gelip açıklığa kavuşturursa daha doğru olur, eğer yanlış bir çözümse çözüm işaretimin de kaldırılması daha doğru olacaktır.
 
@Uton benim anladığım şu: Kodu çalıştıran kişi bir sınır değeri belirleyecek, misal 7. Kod da her satıra 1'den başlayıp sınır değerine kadar giden sayıların karelerini çıkartacak, satırın sonuna da o satırda kaç sayı kullanıldığını yazacak. Karesi yazılan sayı miktarı her satırda bir artacak, ta ki elde sayı kalmayana kadar. 1'den başlaması için biraz düzenledim:

Python:
value = int(input("Provide a value: "))

for i in range(1, value + 1):
    nums = [j*j for j in range(1, i+1)]
    output = " ".join(str(i) for i in nums) + " " + str(i)
    print(output)

7 için bu çıktıyı veriyor:

Kod:
Provide a value: 7
1 1
1 4 2
1 4 9 3
1 4 9 16 4
1 4 9 16 25 5
1 4 9 16 25 36 6
1 4 9 16 25 36 49 7
Ben de bu şekilde anladım. Bence doğru örüntü bu.
 
Çözümü denediniz mi? Bana istediğiniz çıktıyı veriyor gibi gelmedi.

Denedim, düzensiz ama istediğim sonucu az çok alabildim. Anlamak istediğim sadece genel mantığıydı.

Python:
n = int(input(""))

for i in range(1,n+1):
    for j in range(1,i+1):
        print(j*j, end=" ")
    print(i)

Ek bir çözüm de ben paylaşayım. Ve evet ilk satır "1 1" şeklinde olmalı.

Bunu R ile yazınca böyle bir çıktı veriyor hocam:

Kod:
n <-5

for(i in 1:n+1){
  for(j in 1:i+1){
  print(j*j)
    print(i)
  } 
}
[1] 4
[1] 2
[1] 9
[1] 2
[1] 4
[1] 3
[1] 9
[1] 3
[1] 16
[1] 3
[1] 4
[1] 4
[1] 9
[1] 4
[1] 16
[1] 4
[1] 25
[1] 4
[1] 4
[1] 5
[1] 9
[1] 5
[1] 16
[1] 5
[1] 25
[1] 5
[1] 36
[1] 5
[1] 4
[1] 6
[1] 9
[1] 6
[1] 16
[1] 6
[1] 25
[1] 6
[1] 36
[1] 6
[1] 49
[1] 6

Konu sahibi hocam gelip açıklığa kavuşturursa daha doğru olur, eğer yanlış bir çözümse çözüm işaretimin de kaldırılması daha doğru olacaktır.

Gelen dönütlerden sonra düzgününü çıkartmak için bayağı bir deneme yaptım da hiçbirini düzgün olarak R'a çeviremedim sanırım. Python bilgim çok iyi olmadığından R kullanıyorum. Rica edersem R dilini çevirirseniz daha rahat sonucu bulabiliriz.
 
Denedim, düzensiz ama istediğim sonucu az çok alabildim. Anlamak istediğim sadece genel mantığıydı.



Bunu R ile yazınca böyle bir çıktı veriyor hocam:

Kod:
n <-5

for(i in 1:n+1){
  for(j in 1:i+1){
  print(j*j)
    print(i)
  }
}
[1] 4
[1] 2
[1] 9
[1] 2
[1] 4
[1] 3
[1] 9
[1] 3
[1] 16
[1] 3
[1] 4
[1] 4
[1] 9
[1] 4
[1] 16
[1] 4
[1] 25
[1] 4
[1] 4
[1] 5
[1] 9
[1] 5
[1] 16
[1] 5
[1] 25
[1] 5
[1] 36
[1] 5
[1] 4
[1] 6
[1] 9
[1] 6
[1] 16
[1] 6
[1] 25
[1] 6
[1] 36
[1] 6
[1] 49
[1] 6



Gelen dönütlerden sonra düzgününü çıkartmak için bayağı bir deneme yaptım da hiçbirini düzgün olarak R'a çeviremedim sanırım. Python bilgim çok iyi olmadığından R kullanıyorum. Rica edersem R dilini çevirirseniz daha rahat sonucu bulabiliriz.
Kod:
n <- as.integer(readline(prompt = "SDeğer: "))
for (i in 1:n){
  nums <- i^2
  output <- paste(nums, collapse = " ")
  cat(output, "\n")
}

Tam olarak hangisinden bahsettiğinizi anlamadım ama sanırım Bora hocama yazdığım en son Python kodunu diyorsanız buyurun.

Eğer Bora hocamın kodu diyorsanız kendisi için de sorun olmazsa onun kodunu da R'a çevirip atabilirim.
 
@Blacksidemre İçteki for’da sadece j*j durumu print’lenmeli. Dıştaki for’da i print’lenmeli. Scope’ları düzeltmelisiniz ilk.

Bir de içteki for’da elemanlar yan yana yazılıyor ama R bilmediğim için o kısma bir şey diyemeyeceğim.

Bunları düzelttikten sonra deneyin bakalım.
 
Eğer Bora hocamın kodu diyorsanız kendisi için de sorun olmazsa onun kodunu da R'a çevirip atabilirim.
Benim için sorun yok hocam. Ben de R bilmediğim için çeviremiyorum.

@ibrahimY'nin önerisi en temizi ama. Ben kodu yazarken başka şeylerle de uğraşıyordum, niyeyse kareleri önce bir listeye atmanın daha mantıklı olduğunu düşünmüştüm.
 

Geri
Yukarı