在Python中添加下划线作为二进制数的分隔符

u3r8eeie  于 2023-01-08  发布在  Python
关注(0)|答案(4)|浏览(220)

我尝试将十进制数转换为17位二进制数,并在其中添加下划线作为分隔符。我使用以下代码-

id = 18
get_bin = lambda x, n: format(x, 'b').zfill(n)
bin_num = get_bin(id, 17)

我得到的结果是-

00000000000010010

我正在尝试获得以下输出-

0_0000_0000_0001_0010

我怎样才能得到它?

gorkyyrv

gorkyyrv1#

使用Python的格式规范迷你语言good'ol pal

id = 18
width = 17
bin_num = format(id, '0{}_b'.format(width+3))
print(bin_num)
#0_0000_0000_0001_0010
rbpvctlc

rbpvctlc2#

一种方法:

import textwrap
result = '_'.join(textwrap.wrap(bin_num[::-1], 4))[::-1]
输出:
'0_0000_0000_0001_0010'
hgb9j2n6

hgb9j2n63#

您需要将_添加到格式字符串中,而且您不需要使用zfill - 017_b格式,最小长度为17个字符,零填充空格,并在中间使用_。

print(format(18, '021_b')) 

给予

0_0000_0000_0001_0010

还请注意,在二进制模式下,下划线始终是每4位数字,因为你需要那里。更多

yqkkidmi

yqkkidmi4#

使用f字符串应该可以做到这一点,但请注意这里的 * width * 文档:

  • width * 是定义最小字段总宽度的十进制整数,包括任何前缀、分隔符和其他格式字符。...

(着重号是我的)
所以你需要修改"width"变量,使其等于你期望字符串中下划线的个数,让我们看看同一页中的下划线文档:
'_'选项表示浮点表示类型和整数表示类型'd'的千位分隔符使用下划线。对于整数表示类型'b''o''x''X',将每4位插入下划线。
因此,对于我们希望在最终字符串中看到的每个下划线,我们需要将"width"增加一个字符。
我的解决方案是:

def get_bin_string(number, width):
    # f"{number:{width}b}" is the number in binary format with a minimum of "width" bits
    # len(...) is the actual width of the number in case "width" is too small
    # ...-1 is to correct a one-off error
    # .../4 is to get the number of underscores we'll need
    # int(...) is to round down to an integer value
    num_underscores = int((len(f"{number:{width}b}")-1)/4)

    # get the final string we want now including the underscores
    # The '0' to the right of the "":" is to pad the extra bits with 0
    return f"{number:0{width + num_underscores}_b}"

num = 18
width = 17

print(get_bin_string(num, width))

width = 18
print(get_bin_string(num, width))

输出:

0_0000_0000_0001_0010
00_0000_0000_0001_0010

相关问题