Sajal Vasal
Sajal Vasal

Reputation: 45

Using Alphabets get this pattern in PYTHON

Desired Pattern is this

enter image description here

USING THIS CODE

order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    for k in range(1,d+1):
        #c=c-1
        print(chr(c),end=" ")
        c=c+1
    d=d+1
    print()

I am getting this pattern:

      A 
    B C 
  D E F 
G H I J  

Upvotes: 3

Views: 582

Answers (3)

eatmeimadanish
eatmeimadanish

Reputation: 3907

Here is a simpler method to create your output.

cols = int(input("Enter the order : "))
end = cols - 1
c = ord('A')
for r in range(cols):
    l = [chr(c+count) for count in range(cols-end)]
    c=c+len(l)
    l.extend(' '*end)
    end = end -1
    l.reverse()
    print(' '.join(l))

Output:

        A
      C B
    F E D
  J I H G
O N M L K

Upvotes: 1

nepdavis
nepdavis

Reputation: 126

Using the same approach, slightly changing your second inner loop and how you update c should work:

order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    for k in range(0, d):         # iter from 0 to number of letters in the row
        print(chr(c - k),end=" ") # backtrack from starting letter
    d=d+1                         # increment d before updating c
    c = c + d                     # update c to be the starting letter of the next row
    print()

Returns

Enter the order : 4
          A 
        C B 
      F E D 
    J I H G 

Upvotes: 2

SyntaxVoid
SyntaxVoid

Reputation: 2623

When you print(chr(c)) you essentially need to reverse the direction c is moving since you want to print the letters in reverse order. This is easy enough and can be done with just a few extra lines.

First, c should start out at the last (alphabetically) ascii value for the character you want to print (on that specific line). This is done by saying c += d right before your for k for loop.

Then, since we're going backwards, we need to decrement c by 1 each time. We add c -= 1 at the very start of your for k loop.

Finally, we need to push c back to the next letter. Since we printed d letters, we just add c += d after the for k loop. This last bit might seem a bit confusing. As an example, one of the lines printed is J I H G. After printing this line, c has the ascii value of G but we want to be able to print the next letter after J and not G which is why we add the value of d again.

The completed code is

order = int(input("Enter the order : "))
c = ord("A")
d = 1
for i in range(order,0,-1):
    for j in range(i):
        print(" ",end=" ")
    c += d
    for k in range(d):
        c -= 1
        print(chr(c),end=" ")
    c += d
    d += 1
    print()

Output:

Enter the order : 6
            A
          C B
        F E D
      J I H G
    O N M L K
  U T S R Q P

P.S

  1. Instead of writing x = x + 1, it is more pythonic to say x += 1. This is the case for all the other mathematical operations. x = x*3 can be re-written as x *= 3.
  2. for k in range(1, d+1) can be written more succinctly as for k in range(d)

Upvotes: 1

Related Questions