-1

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

4

3 回答 3

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  
于 2012-09-26T23:58:23.323 回答
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)

它的工作原理完全相同(你可以使用任何你想要的数字,没关系),并根据你的数字有多大进行相应的调整......

于 2013-03-03T17:48:05.687 回答
0

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

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

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

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

print('{:{width}}'.format(row*col, width=8), end='')
于 2012-09-27T00:00:58.623 回答