2017-02-27 1841 views
0

我試圖打印一個半角python左側的星星。 到目前爲止,這是我的代碼數字金字塔Python編號

for i in range(1,12): 
    for j in range(12 - i): 
     print(" ", end = " ") 
    for j in range(1, i): 
     print(j, end = " ") 
    print("\n") 

和我的輸出是

    1 

        1 2 

       1 2 3 

       1 2 3 4 

      1 2 3 4 5 

      1 2 3 4 5 6 

     1 2 3 4 5 6 7 

     1 2 3 4 5 6 7 8 

    1 2 3 4 5 6 7 8 9 

    1 2 3 4 5 6 7 8 9 10 

然而,我的輸出,就是要以相反的順序:

  1 

      2 1 

     3 2 1 

     4 3 2 1 

    5 4 3 2 1 

我怎樣才能讓這個改變?

回答

1

只是扭轉第二循環 - 即打印出實際數字一:

for j in range(i-1, 0, -1): 

最後一個參數控制的「臺階」,或有多少在每次循環迭代變量的變化。輸出:

   1 

       2 1 

      3 2 1 

      4 3 2 1 

     5 4 3 2 1 
     ... 
+0

所以只是爲了確認您輸入的代碼: 範圍爲i(12) - 1 0並在每次迭代中減少1? – fijilemon12

+0

對。參數是開始,停止和步驟。循環不包括停止值。 – Prune

+0

謝謝!感謝您的幫助 – fijilemon12

1

你可以只扭轉你打印出號

for i in range(1,12): 
    for j in range(12 - i): 
     print(" ", end = " ") 
    for j in reversed(range(1, i)): 
     print(j, end = " ") 
    print("\n") 
+0

所以當你寫 '對於j在顛倒(範圍(1,i)):' 是顛倒了一種方法或? – fijilemon12

+0

[反轉](https://docs.python.org/3.3/library/functions.html#reversed)只是一個內置的自由函數,它返回一個輸入的副本,但是相反。還有[.reverse](https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types),這是一種方法,並在適當的位置反轉可變序列,返回'None'。 –

0

的問題是在你的第二個for循環,因爲你是循環從1i,這意味着你開始了範圍首先打印1個,並且每個隨後的數字直到(不包括)i

幸運的是,for循環能夠反向進行。所以,相反的:

for j in range(1, i)

你可以寫:

for j in range((i-1), 0, -1)

當第一個參數是表示在循環開始,第二個是在那裏,循環結束,第三個表示我們的跳躍會有多大,在這種情況下是負面的。我們從i-1開始並在0完成的原因是因爲循環從第一個給定的數字開始,並且循環到第二個給定的數字之前,所以在給定的代碼中,循環僅在i之前停止,所以這個開始只是在i之前也是如此,但如果您希望在金字塔中包含12,則可以刪除-1

1

通過添加第三個參數(-1)來反轉範圍。同樣格式化您的號碼以使用2個地方,所以10不會將最後一行推到右側。最後,最後print可能不應該有\n,因爲這已經是print默認結束字符:

for i in range(1,12): 
    for j in range(12 - i): 
     print(" ", end = "") 
    for j in range(i-1, 0,-1): 
     print(str(j).rjust(2), end = "") 
    print()