我在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()
我认为,这是正确的。请问有人解释一下,问题出在哪里?
答案 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