Python中的乘法表只显示六列

时间:2015-06-07 09:22:11

标签: python

我在PyCharm中编写了一个代码,运行后,PyCharm和Python3只显示了六列。

layout = "{0:>2} {1:>2} {2:>2} {3:>2} {4:>2} {5:>2} {6:>2} {7:>2} {8:>2} {9:>2} {10:>2} {11:>2}"
def multiple_table2():
    for i in range (1, 11):
        print(layout.format(i, "\t", i*2, "\t", i*3, "\t", i*4, "\t", i*5, "\t", i*6, "\t", i*7, "\t", i*8, "\t", i*9, "\t", i*10, "\t", i*11, "\t", i*12))

multiple_table2()

我认为,这是正确的。请问有人解释一下,问题出在哪里?

1 个答案:

答案 0 :(得分:3)

您要在列中添加12个以上的值。前12个是6个数字和6个制表符。每个"\t"字符串都是一个值;你基本上是在制作:

' 1  \t  2  \t  3  \t  4  \t  5  \t  6  \t'

作为字符串;注意之间的空格!这是一个短于2个字符的空间,以及模板本身的另一个空格。

您无需将这些制表符放入您的格式中;你已经把插槽隔开了:

print(layout.format(i, i*2, i*3, i*4, i*5, i*6, i*7, i*8, i*9, i*10, i*11, i*12))

现在你传入了12个插槽的12个参数。

如果你真的想在两者之间插入标签,那么你可以将它们放在layout字符串中:

layout = '{0:>2}\t{1:>2}\t{2:>2}\t{3:>2}\t{4:>2}\t{5:>2}\t{6:>2}\t{7:>2}\t{8:>2}\t{9:>2}\t{10:>2}\t{11:>2}'

Python为您提供了避免输入的工具。 print()已经在不同的参数之间放置了空格。与generator expression中的另一个循环一起,您可以格式化所有这些数字,而无需写出所有*multiplier个参数:

for i in range (1, 11):
    print(*(format(i * m, '>2') for m in range(1, 13)))

如果您仍需要在两者之间使用制表符而不是空格,则可以使用print()参数告诉sep将其用作分隔符:

for i in range (1, 11):
    print(*(format(i * m, '>2') for m in range(1, 13)), sep='\t')

考虑到因为你乘以11和12,你会得到不适合2个字符的数字:

>>> for i in range (1, 11):
...     print(*(format(i * m, '>2') for m in range(1, 13)))
... 
 1  2  3  4  5  6  7  8  9 10 11 12
 2  4  6  8 10 12 14 16 18 20 22 24
 3  6  9 12 15 18 21 24 27 30 33 36
 4  8 12 16 20 24 28 32 36 40 44 48
 5 10 15 20 25 30 35 40 45 50 55 60
 6 12 18 24 30 36 42 48 54 60 66 72
 7 14 21 28 35 42 49 56 63 70 77 84
 8 16 24 32 40 48 56 64 72 80 88 96
 9 18 27 36 45 54 63 72 81 90 99 108
10 20 30 40 50 60 70 80 90 100 110 120