如何 space 根据一个值输出一个字符串

How to space out a string based on a value

我正在尝试 space 以指定的宽度在单个 print() 语句中输出内容。我只会post相关代码:

def print_formatted(number):
    # your code goes here
    width = len(convert(number, 2))

    for i in range(number):
        print(
            str(i + 1) + width + 
            str(convert(i + 1, 8)) + width + 
            str(convert(i + 1, 16)) + width + 
            str((convert(i + 1, 2)))
            )

我知道串联 ...+ width + 不起作用。我把它放在那里是为了想象我的目标是什么。我从文档中了解到 format() 是要使用的函数,但我还没有看到与我在这里尝试做的类似的实现。

成功输出:

    1     1     1     1
    2     2     2    10
    3     3     3    11
    4     4     4   100
    5     5     5   101
    6     6     6   110
    7     7     7   111
    8    10     8  1000
    9    11     9  1001
   10    12     A  1010
   11    13     B  1011
   12    14     C  1100
   13    15     D  1101
   14    16     E  1110
   15    17     F  1111
   16    20    10 10000
   17    21    11 10001    

像这样?

print(
    str(i + 1)+"{}".format("\t")+ 
    str(convert(i + 1, 8)) +"{}".format("\t")+
    str(convert(i + 1, 16)) +"{}".format("\t")+ 
    str((convert(i + 1, 2)))
     )


您可以为此使用格式化选项。不幸的是,您必须手动指定最大宽度,因为 print 无法知道稍后要打印的最大宽度是什么:

list_of_tuples = list(zip(
    range(10),
    range(0, 20, 2),
    range(0, 30, 3),
    [10**i for i in range(10)]
    ))

width = 10 # Has to be specified manually, unfortuntately.
for tup in list_of_tuples:
    print("\t".join(f"{number:>{width}}" for number in tup))

     0           0           0           1
     1           2           3          10
     2           4           6         100
     3           6           9        1000
     4           8          12       10000
     5          10          15      100000
     6          12          18     1000000
     7          14          21    10000000
     8          16          24   100000000
     9          18          27  1000000000