python乘法表错误

时间:2012-09-26 23:52:04

标签: python while-loop

我正在使用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

3 个答案:

答案 0 :(得分: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的人可能会因为使用旧式的字段而对你进行评分。如果仅仅是为了你自己的自学,那么值得弄清楚如何以两种方式去做。)或者,或者,你应该看看如何将其转换为使用可变宽度格式规范('%*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  

答案 1 :(得分:0)

使用可变宽度字段说明符:

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

这会自动添加足够的填充以将数字填充到(此处)8个空格。您也可以将该spacing参数作为参数传递。

使用新式格式语法使用可变宽度:

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

答案 2 :(得分:0)

为什么不在.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)

它的工作方式完全相同(你可以使用你想要的任何数字,无所谓),只需根据你的数字大小来调整......