Döngü sorusu hakkında

image

Kullanıcıdan istenilecek n değeri için şekildeki gibi çıktı verecek programı verebilirmisiniz.
sayı basamakları sağa hizalı olacak.

adet=int(input("sayı:"))

print("*"*30)

for i in range(1,adet):
    print(" "*(adet-i),end="")
    for j in range(i,0,-1):
        print(j,end="")
    print("")
3 Beğeni

Şöyle de yapabilirsiniz.

def f(n):
    liste = [str(i) for i in range(n)]
    for i in liste:
        string = " " * (n - 1 - int(i))
        print(string + "".join(reversed(liste[0:int(i) + 1])))


# Örnek
f(10)
         0
        10
       210
      3210
     43210
    543210
   6543210
  76543210
 876543210
9876543210

4 Beğeni

teşekkürler sağolun.

teşekkürler sağolun…

while True:
    try:
        adet=int(input("sayı:"))
    except ValueError as Hata:
        print("Yalnızca sayı girmelisiniz.")
        continue
    print("*"*30)

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

Böyle birşey yaptım ben de arkadaşın çözümüne ek olarak. :slight_smile:
Ancak sanırım bu kodlar n=9 dahil güzel çalışıyor. 9’ dan sonra sağa doğru da birer kayma gerçekleşiyor. Bunun algoritması sanırım daha karışık. Sabitlemek adına ilk başta 10 değeri için yani 2 basamaklı değerler, sonra da 3-4-5-6-… basamaklı değerler için kodlar düzenlenmeli. Ve sanırım bu matematikteki toplam fark formülü ile hesaplanabilir. Ancak kullanıcı sanırım çok cüzi rakamlar gireceğinden pek kod kalabalığına gerek yok.

1 Beğeni

eyvallah sağolasın :grinning:

1 Beğeni

Onun da çözümü şöyle:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def f(n):
    liste = [str(i) for i in range(n)]
    uzunluk = "".join(liste)
    for i in liste:
        frmt = "".join(reversed(liste[0:int(i) + 1]))
        string = " " * (len(uzunluk) - len(frmt))
        print(string + frmt)


f(12)
             0
            10
           210
          3210
         43210
        543210
       6543210
      76543210
     876543210
    9876543210
  109876543210
11109876543210
1 Beğeni

rakamların arasını birer boşluk koyabilirmiyiz, peki şöyle

image

Evet koyabiliriz:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def f(n):
    liste = [str(i) for i in range(n)]
    uzunluk = " ".join(liste)
    print(uzunluk)
    for i in liste:
        frmt = " ".join(reversed(liste[0:int(i) + 1]))
        string = " " * (len(uzunluk) - len(frmt))
        print(string + frmt)


f(12)

                        0
                      1 0
                    2 1 0
                  3 2 1 0
                4 3 2 1 0
              5 4 3 2 1 0
            6 5 4 3 2 1 0
          7 6 5 4 3 2 1 0
        8 7 6 5 4 3 2 1 0
      9 8 7 6 5 4 3 2 1 0
   10 9 8 7 6 5 4 3 2 1 0
11 10 9 8 7 6 5 4 3 2 1 0
4 Beğeni