python 3中的可变字符串格式

时间:2018-07-28 18:15:20

标签: string python-3.x string-formatting

输入是一个数字,例如9,我想从1到9打印十进制,八进制,十六进制和二进制值,例如:

admin

如何使用类似的语法在python3中实现这一目标

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

我的意思是,如果数字是999,那么我希望将小数点10像'10'一样打印,而将999的二进制等效值打印为1111100111,所以我想像'1010'那样打印10。

1 个答案:

答案 0 :(得分:0)

您可以使用str.format()及其mini-language为您完成整个工作:

for i in range(1, 10):
    print("{v} {v:>6o} {v:>6x} {v:>6b}".format(v=i))

将打印:

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

更新:要在变量中定义字段“宽度”,您可以使用格式内格式结构:

w = 5  # field width, i.e. offset to the right for all octal/hex/binary values

for i in range(1, 10):
    print("{v} {v:>{w}o} {v:>{w}x} {v:>{w}b}".format(v=i, w=w))

或者,如果您希望它们的间距不均匀,请为每个字段 type 定义不同的宽度变量。

顺便说一句。由于您已经用python-3.x标记了问题,因此,如果您使用的是Python 3.6或更高版本,则可以使用Literal String Interpolation进一步简化该问题:

w = 5  # field width, i.e. offset to the right for all octal/hex/binary values

for v in range(1, 10):
    print(f"{v} {v:>{w}o} {v:>{w}x} {v:>{w}b}")