2016-07-31 331 views
2

我想實現這個如何使用python循環創建數字的三角形?

0 1 2 3 4 5 6 7 8 9 
    0 1 2 3 4 5 6 7 8 
    0 1 2 3 4 5 6 7 
     0 1 2 3 4 5 6 
     0 1 2 3 4 5 
      0 1 2 3 4 
      0 1 2 3 
       0 1 2 
       0 1 
        0 

而且我越來越接近,但現在我卡住了。這裏是我當前的代碼

def triangle(): 
    n = 9 
    numList = [0,1,2,3,4,5,6,7,8,9] 
    for i in range(10): 
     for i in numList: 
      print(i, end=" ") 
     print() 
     numList[n] = 0 
     n -= 1 
triangle() 

這是電流輸出

0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 0 
0 1 2 3 4 5 6 7 0 0 
0 1 2 3 4 5 6 0 0 0 
0 1 2 3 4 5 0 0 0 0 
0 1 2 3 4 0 0 0 0 0 
0 1 2 3 0 0 0 0 0 0 
0 1 2 0 0 0 0 0 0 0 
0 1 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 

所以我有一個四圍的方式,但,它的倒退,而且是0的代替空格

+0

對於初學者來說,你能不能找出多餘的'0'來自哪裏並且做些什麼?例如'numList [n] = 0' - >'numList.pop()'。 – kaylum

+0

對不起kaylum,我還在學習基礎知識,並完全忘記了.pop()函數,這會讓它變得容易很多,現在我可以弄清楚如何'反轉' – oneman

回答

1

有趣的益智,你可以試試這個:

n = range(0,10) #set your range 
while len(n)<20: #loop until it exhausts where you want it too 
    print ''.join(str(e) for e in n[0:10]) #print as a string! 
    n = [' ']+n  #prepend blank spaces 

here is an example

您可以將相同的邏輯應用於您的嘗試。基本上,我在每個循環之後在N的開始處添加一個空格,然後僅打印前十個元素。我打印列表的方式有點笨拙,因爲我正在加入,我需要將每個元素更改爲一個字符串。

+0

按預期工作,謝謝幫幫我 – oneman

2

你可以試試這個代碼:

def triangle(): 
    for i in range(10): 
     print i * " ", 
     for j in range(10 - i): 
      print j, 
     print  

triangle() 

的代碼幾乎是自我解釋。

在線例子是here

0

其他解決方案都很好,但生活變得與numpyarange和重載*操作字符串更容易一些。 Python的內置功能非常強大。

for i in range(11): 
    print ' ' * i + ''.join(str(elt) for elt in np.arange(10 - i))