2013-05-01 32 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):]