2011-09-20 47 views
0
  1. 此代碼的輸出非常相似,但不完全是它應該是。
  2. 的代碼是:任何人都可以幫助我找出這段代碼中的解析錯誤?

    def printMultiples(n): 
        i = 1 
        while (i <= 10): 
         print(n*i, end = ' ') 
         i += 1 
    n = 1 
    while (i<= 3): 
        printMultiples(n) 
        n += 1 
    
  3. 輸出是:

    1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 
    
  4. 而應該是這樣的:

    1 2 3 4 5 6 7 8 9 10 
    2 4 6 8 10 12 14 16 18 20 
    3 6 9 12 15 18 21 24 27 30 
    
  5. 如何把這個代碼進行修改?
+2

您是否擔心(一)缺乏換行符,或數字之間(二)有趣的間距讓他們排成一列,或(c)兩者? –

+0

實際上。 (a)剛剛解決。現在(二)仍然 – Muavia

+0

您的代碼給出不起作用...你的第二個循環應該是結束n不是我 – donkopotamus

回答

1

printMultiples的末尾添加一個空print,所述while (i <= 10):循環外。

+0

問題解決。現在如果我想以等距列的形式排列這個輸出結果呢? – Muavia

0

您的問題是,您沒有在每個倍數列表後打印新行。你可以通過把你的printMultiples函數結束外循環線

print() 
0

要使列排隊解決這個問題,你就需要徹底改變你的做法。目前,printMultiples()無法知道在每個數字之後要放置多少個空格,因爲它不知道將在外部循環中調用多少次。

什麼你可能做的是:

  • 創建的字符串表示每個多重的二維陣列(不打印任何東西) - 的str()功能將是有用的這
  • 對於每一列,檢查該列中最長號碼的長度(它總是最後一個)並添加一個
  • 打印每一行,在每個字符串之後添加適當的空格數以匹配該列所需的空格數

一個更簡單的方法,如果你對只有感興趣的柱狀輸出,而不是精確的間距,將是打印每個數字後足夠的空間,以適應您希望輸出的最大數量。所以,你可能會得到:

1 2 3 4 5 6 7 8 9 10 
2 4 6 8 10 12 14 16 18 20 
3 6 9 12 15 18 21 24 27 30 

(注意如何有三個空格前三列,每列數,即使你並不需要所有三個空格之後)。

更改現有的代碼做會更容易。詳細信息請參見Format String Syntax

0

如果你已經知道你要墊的數字是寬度爲3,那麼一個合適的(和更Python)printMultiples是

def printMultiples(n): 
    txt = "".join(["{0: <3d}".format(n*i) for i in range(1, 11)]) 
    print(txt) 

更好的辦法是,允許寬度改變。而你可以再傳給你喜歡的,如你所期望的數量最大寬度的寬度

def printMultiples(n, width=3): 
    txt = "".join(["{0: <{1}d}".format(n*i, width) for i in range(1, 11)]) 
    print(txt) 

width = len(str(4 * 10)) + 1 
for i in range(1, 4): 
    printMultiples(i, width) 
相關問題