使用字符串格式来评估值的十六进制,二进制,十进制和八进制版本

时间:2019-04-21 00:31:40

标签: python-3.x

我是Python的初学者,试图了解字符串格式如何帮助在同一行中列出数字的十六进制,八进制,十进制和二进制版本。

我试图理解所提供代码段的逻辑。

"{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(i,width = width)

我不明白上面的代码是如何工作的。主要是:

  • 0的功能是什么:

  • {width}的功能是什么(用于间距)

  • doXb是什么以及如何评估它们。

为这个冗长的问题表示歉意,我是一个初学者,我似乎还不明白其他任何解释。

1 个答案:

答案 0 :(得分:0)

了解一段代码的最简单方法是在适当的时候在Python解释器中执行代码(see this documentation,如果您不知道解释器的工作原理)。在这种情况下,我建议您首先运行该行,然后看看会发生什么。

>>> "{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(i,width = width)
...
NameError: name 'i' is not defined

首先,您会发现名称错误,这意味着未分配变量i。让我们将其更改为42。

>>> "{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(42,width = width)
...
NameError: name 'width' is not defined

当然,我们还需要指出width是什么。让我们尝试使用值8

>>> "{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(42,width = 8)
'      42       52       2A   101010'

现在,我们得到了一些可行的方法。那么width是什么?您会看到它影响您获得的不同值左侧的间距。让我们尝试将其更改为14

>>> "{0:{width}d} {0:{width}o} {0:{width}X} {0:{width}b}".format(42,width = 14)
'            42             52             2A         101010'

空间确实增加了。现在,基于您的问题的标题,我将假定您知道什么是十六进制,二进制,十进制和八进制数字。作为非常的简短复习,请知道:

  • 十进制以10为底(使用从0到9的数字,加1并在到达下一个值时再次开始→... 8,9,10,11 ...)。
  • 二进制以2为底(使用从0到1的数字,加1并在到达下一个值→0、1、10、11、100 ...时重新开始)。
  • 十六进制为16(使用从0到9的数字和从A到F的字母组成从0到15的值的数字),再加上一个数字将添加16→... 9,A,B,C,D, E,F,10、11 ...)。
  • 八进制为8(使用从0到7的数字,每当我们达到7→...,6、7、10、11、12 ...时,就添加一个数字。)

您可能想知道的是:为什么每个数字表示的开头都出现0(零)?正如您所提到的,这是字符串格式的一部分。您可以在official documentation中找到有关此主题的更多信息。这意味着每当您在字符串中的大括号中0时,传递给.format()函数的第一个值(在本例中为42)将替换{{ 1}},并将对其应用格式。

以下是其工作方式的一个示例。您不必局限于使用0。实际上,您可以使用其他数字,例如:

0

如果只有一个值,您甚至可以完全跳过花括号内的数字:

>>> "{0} is a number, {1} is another number and {0} is the same as the first number.".format(12, 24)
'12 is a number, 24 is another number and 12 is the same as the first number.'

要了解花括号右侧,在冒号之后,您需要查看我之前引用的文档。但是,作为一个快速入门,假设您要显示一个带两位小数的浮点数。您会说>>> "{} is a number.".format(12) '12 is a number.' 表示2位数的精度,而说.2表示f。看起来像:

float

在您的特定示例中,>>> "{0:.2f} is a number.".format(12) '12.00 is a number.' 代表十进制d代表八进制o代表 heXadecimal X代表 binary 。您可以看到这是真的,因为在b给出的示例中,42的确是十进制的42,八进制的42,十六进制的52和{ {1}}的二进制格式。