Döngü sorusu yardım


#1

image

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


#2
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

Şö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

teşekkürler sağolun.


#5

teşekkürler sağolun…


#6
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.


#7

eyvallah sağolasın :grinning:


#8

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

#9

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

image


#10

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