我正在使用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)
答案 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)
它的工作方式完全相同(你可以使用你想要的任何数字,无所谓),只需根据你的数字大小来调整......