2012-09-26 49 views
-1

我正在python中使用while循環構建乘法表。雖然數字排列齊整,但輸出很奇怪。表格完成情況良好,但看起來很難看。我怎樣才能拉直最後三列?我會張貼輸出的照片,但我是一個新用戶,它不會讓我。python乘法表錯誤

width = int(input("Please enter the width of the table:")) 
def print_times_table(width): 

    row = 0 
    col = 0 
    width += 1 
    spaces = ' ' 

    while row < width: 
     col = 0 
     while col < width: 

      print(row*col, spaces, end="") 
      col += 1 
     print("\n", end='') 
     row +=1 

print_times_table(width) 

輸出:http://i.stack.imgur.com/C9AzE.jpg

+1

如果這是作業,你應該這麼說... – Triptych

回答

1

首先,你不需要的圖片;你應該能夠僅僅通過縮進四個空格(或使用{}圖標),顯示輸出文本:

Please enter the width of the table:4 
0 0 0 0 0 
0 1 2 3 4 
0 2 4 6 8 
0 3 6 9 12 
0 4 8 12 16 

的問題是,你假設每個數字將是相同的寬度。這可以達到3x3,因爲一切都是一個字符寬度,但對於5x5,一些數字是一個字符,一些是兩個(當然,它在10x10時變得更糟)。

修復此問題的簡單方法是將強制爲,每個單元的寬度必須相同。

首先,你必須計算你需要的最大尺寸。但這很簡單:它的尺寸爲width*width

接下來,你必須知道如何強制數字用盡許多字符。 Python有幾種方法可以做到這一點。我將演示如何使用老式的字段說明符來完成它,但是您應該研究如何將其轉換爲新式的格式字符串。 (如果這是家庭作業,那麼有人教你Python 3可能會因爲使用舊式的fieldspec而給你打分,如果只是爲了你自己的自我教育,那麼有必要弄清楚如何做到這一點。)或者,你也可以應該看看如何將其轉換爲使用可變寬度格式規範('%*d'),而不是構建一個靜態的'%4d'規範。 (nneonneo的答案應該給一個線索了這一點。)

width = int(input("Please enter the width of the table:")) 
def print_times_table(width): 

    row = 0 
    col = 0  
    fieldspec = '%' + str(len(str(width * width))) + 'd' 
    width += 1 

    while row < width: 
     col = 0 
     while col < width: 

      print(fieldspec % (row*col,), ' ', end="") 
      col += 1 
     print("\n", end='') 
     row +=1 

print_times_table(width) 

現在,您可以:

Please enter the width of the table:4 
0 0 0 0 0 
0 1 2 3 4 
0 2 4 6 8 
0 3 6 9 12 
0 4 8 12 16 
+0

很棒的細節!我認爲如果你使用了一個可變寬度的字段說明符,就像在其他答案中一樣,這將會更加清晰。 –

+0

@SamMussmann:其實,這對讀者來說是另一個很好的「練習」。我會編輯答案。 – abarnert

0

使用可變寬度的字段說明:

print('%*d' % (8, row*col), end='') 

這會自動添加足夠的填充來填寫數字到(這裏)8個空格。您也可以將該間距參數作爲參數傳遞。

print('{:{width}}'.format(row*col, width=8), end='') 
0

爲什麼不使用你的變量combonation與.ljust:

要使用新的樣式格式的語法使用可變寬度?像這樣:

width = int(13) 
def table(width): 

row = 1 
col = 1 
width += 1 
spaces = ' ' 

while row < width: 
    col = 1 
    while col < width: 
     print(str(row*col).rjust(5, ' '), end="") 
     col += 1 
    print("\n", end='') 
    row +=1 

table(width) 

它的工作原理完全一樣(你可以使用任何號碼,你想,無所謂了),只是相應地調整取決於你的數字是如何越來越大...