Номер Python пирамида - PullRequest
       26

Номер Python пирамида

2 голосов
/ 13 октября 2019

Я пытаюсь сделать числовую пирамиду. Но этот код не очень хороший.

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("")

Как я могу это исправить? Я пытался использовать формат (). Я думаю, что я использовал неправильно.

Я хочу взять как этот вывод.

                  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

Мой вывод:

               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 ]

1 голос
/ 13 октября 2019

Используйте '\t' вместо одного пробела между числами ' '

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("")

здесь вывод:

enter image description here

0 голосов
/ 13 октября 2019

Там, где пара мест, где вы выводите 1 пробел между числами. Я добавил комментарии к коду ниже, чтобы указать, где это происходит. Изменяя длину пробела между числами в соответствии с длиной самого длинного числа, мы можем сделать так, чтобы все отображалось в четных четных столбцах.

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("")

Вывод:

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