Python number pyramid

Viewed 194

I am trying to make number pyramid. But this codes is not good.

print("Fourth Number Pattern")
lastNumber = 9
for i in range(1, lastNumber):
    for j in range(lastNumber-i):
        print(' ', end=' ')
    for j in range(1,i):
        if(lastNumber>=6):
           print(2**(j-1), end=' ')    
    for i in range(-1+i, -1, -1):
        print(format(2**i, "2d"), end=' ')

    print("")

How can I fix it? I tried use format(). I guess I used wrong.

I want to take like this output.

                  1
              1   2  1
           1  2   4  2  1
        1  2  4   8  4  2  1
      1 2  4  8  16  8  4  2 1
    1 2 4  8 16  32 16  8  4 2 1
  1 2 4 8 16 32  64 32 16  8 4 2 1
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1

My output:

               1 
            1  2  1 
          1 2  4  2  1 
        1 2 4  8  4  2  1 
      1 2 4 8 16  8  4  2  1 
    1 2 4 8 16 32 16  8  4  2  1 
  1 2 4 8 16 32 64 32 16  8  4  2  1 
1 2 4 8 16 32 64 128 64 32 16  8  4  2  1 
2 Answers

Use '\t' instead of a single space between numbers' '

print("Fourth Number Pattern")
lastNumber = 9
for i in range(1, lastNumber):
    for j in range(lastNumber-i):
        print(' ', end='\t')
    for j in range(1,i):
        if(lastNumber>=6):
           print(2**(j-1), end='\t')    
    for i in range(-1+i, -1, -1):
        print(format(2**i, "2d"), end='\t')

    print("")

here is the output :

enter image description here

There where a couple of places where you where outputting 1 space in between numbers. I've added comments to the code below to indicate where this was happening. By changing the length of the space in between numbers to match the length of the longest number, we can make everything get displayed in nice even columns.

print("Fourth Number Pattern")
lastNumber = 9
length_of_longest_number = len(str( max(2 ** (9-2), 1) ))
s = length_of_longest_number # The number of spaces we will be putting in between numbers
for i in range(1, lastNumber):
    for j in range(lastNumber-i):
        print(' ' * s, end=' ') # Was outputting 1 space before
    for j in range(1,i):
        if(lastNumber>=6):
           print(format(2**(j-1), str(s)+"d"), end=' ') # Was outputting 1 space before
    for i in range(-1+i, -1, -1):
        print(format(2**i, str(s)+"d"), end=' ')

    print("")

Output:

                              1
                          1   2   1
                      1   2   4   2   1
                  1   2   4   8   4   2   1
              1   2   4   8  16   8   4   2   1
          1   2   4   8  16  32  16   8   4   2   1
      1   2   4   8  16  32  64  32  16   8   4   2   1
  1   2   4   8  16  32  64 128  64  32  16   8   4   2   1
Related