我试图在保持位长度的同时在python中增加二进制序列。 到目前为止,我正在使用这段代码...
'{0:b}'.format(long('0100', 2) + 1)
这将获取二进制数,将其转换为long,添加一个,然后将其转换回二进制数。例如,01 - > 10。
但是,如果我输入一个诸如'0100'之类的数字,而不是将其递增为'0101',我的代码 将它增加到'101',因此忽略第一个'0',只增加'100' 到'101'。
如何使我的代码保持位长的任何帮助将不胜感激。 感谢
答案 0 :(得分:0)
那是因为5
在从int(或long)转换为二进制后表示为'101',所以要在它之前使用0
作为填充符的0之前加上前缀,并传递宽度格式化时的初始二进制数。
In [35]: b='0100'
In [36]: '{0:0{1:}b}'.format(long(b, 2) + 1,len(b))
Out[36]: '0101'
In [37]: b='0010000'
In [38]: '{0:0{1:}b}'.format(long(b, 2) + 1,len(b))
Out[38]: '0010001'
答案 1 :(得分:0)
使用format strings可能最好解决这个问题。获取输入的长度,从中构造格式字符串,然后使用它来打印递增的数字。
from __future__ import print_function
# Input here, as a string
s = "0101"
# Convert to a number
n = long(s, 2)
# Construct a format string
f = "0{}b".format(len(s))
# Format the incremented number; this is your output
t = format(n + 1, f)
print(t)
要硬编码到四个二进制位置(左边用0填充)你会使用04b
,五个你会使用05b
等。在上面的代码中我们只得到输入的长度字符串。
哦,如果你输入一个像1111
这样的数字并加1,你将获得10000
,因为你需要一个额外的位来代表它。如果您想回到0000
做t = format(n + 1, f)[-len(s):]
。
答案 2 :(得分:0)
str.format
允许您将长度指定为此参数
>>> n = '0100'
>>> '{:0{}b}'.format(long(n, 2) + 1, len(n))
'0101'