2016-07-06 2 views
1

Я должен иметь выход, который выглядит следующим образом:номер пирамиды, используя в то время как петля для питона

  1 
     2 1 
     3 2 1 
    4 3 2 1 
    5 4 3 2 1 
6 5 4 3 2 1 

Я использую этот код:

outer = 1 
while outer <=6: 
    inner = 1 
    while inner <= outer: 
     print(inner, end=" ") 
     inner = inner + 1 
    print(" ") 
    outer = outer + 1 

, но это не делает то, что он должен делать. Это выглядит следующим образом:

1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 
1 2 3 4 5 6 

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

ответ

0

использование string.join().

def triangle(levels): 
    for i in range(1,levels + 1): 
     print(' '*2*(levels - i) + ' '.join(str(j + 1) for j in reversed(range(i)))) 

triangle(6) 

делает

  1 
     2 1 
     3 2 1 
    4 3 2 1 
    5 4 3 2 1 
6 5 4 3 2 1 
0

Глядя код, были только два вопроса: 1. Вы печатали в порядке возрастания. Поэтому, если вы вычтите внешний из внутреннего, он будет печатать числа в порядке убывания 2. Отступы варьируются от одной строки до следующей, поэтому добавьте отступы во внешнем цикле. Это как ваш код будет выглядеть с 2 пересмотров:

outer = 1 
while outer <=6: 
    inner = 1 
    print (" " * 2 *(6 - outer), end="") 
    while inner <= outer: 
     print(outer - inner + 1, end=" ") 
     inner = inner + 1 
    print(" ") 
    outer = outer + 1 
0

Другое while решение:

outer = 1 
while outer <= 6: 
    inner = outer 
    pos = 6  # create a position variable and start from 6 since you are printing backward 
    while pos >= 1: 
     if pos > inner:   # print white space if pos is larger than the diagonal 
      print(" ", end=" ") 
      pos = pos - 1 
     else: 
      print(inner, end = " ") # Start to print number when pos is smaller than inner 
      inner = inner - 1 
      pos = pos - 1 
    print(" ") 
    outer = outer + 1 

      1 
     2 1 
     3 2 1 
    4 3 2 1 
    5 4 3 2 1 
6 5 4 3 2 1 
+0

ах спасибо большое за объяснения тоже. это действительно очень помогло мне^_ ^ –