2013-05-01 33 views
0

我想在保持位长的同时增加python中的二进制序列。 到目前为止我使用这段代码...Python - 在保持位长的同时递增二进制序列

'{0:b}'.format(long('0100', 2) + 1) 

这将需要二进制数,将其转换为长,增加了一个,然后将其转换回二进制数。例如,01 - > 10.

但是,如果我输入一个数字,如'0100',而不是将其递增到'0101',我的代码 将其递增为'101',因此它忽略了第一个' 0',并且仅将'100' 增加到'101'。

任何关于如何使我的代码保持位长的帮助将不胜感激。 由于

回答

0
str.format

,可以指定长度这样

>>> n = '0100' 
>>> '{:0{}b}'.format(long(n, 2) + 1, len(n)) 
'0101' 
+0

非常感谢,这正是我一直在寻找的! – clay 2013-05-01 07:29:25

0

这是因为5被表示为“101”从int(或长)至二进制转换后,所以之前的前缀一些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' 
+0

的参数这不会在这种情况下'工作。 '{0:04B}' 格式(长( '0000010100',2)+ 1 )',因为你将宽度固定为4,而不是像OP所要求的那样使用输入的长度。 (当然,也许OP应该弄清楚你有什么....):) – 2013-05-01 01:58:39

+0

@RayToal我正要补充一点。 – 2013-05-01 02:02:44

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,因为你需要额外的一点来表示。如果你想换行做t = format(n + 1, f)[-len(s):]