我如何用前导零计算二进制数?

How would i count up in binary with leading zeros?

所以我想用二进制计数,但在示例中保留前导零以计数到 6,它看起来像这样:

0000

0001

0010

0011

0100

0101

0110

我有这段代码,但它只能达到 repeat=4 指定的特定数量,我需要它一直运行直到找到特定数字。

for i in itertools.product([0,1],repeat=4):
x += 1
print i
if binNum == i:
    print "Found after ", x, "attempts"
    break

没关系伙计们,我找到了答案!

我只是像这样把它放在一个 while 循环中:

while found == 0:
repeatTimes += 1
for i in itertools.product([0,1],repeat=repeatTimes):
    x += 1
    print i
    if binNum == i:
        found = 1
        pos = x
        break

没有前导零

n=5   # End number
i=0   # index var
while i < n:
    print format(i, "04b") 
    i+=1

上面的例子会显示 0 到 5。04b 给你 4 个字符作为结果(带前导零)。

输出:

0000
0001
0010
0011
0100

带前导零

while( i <= n ):
    len_bin = len(bin(i)[2:])
    if(len_bin%4 != 0):
        lead = 4 - len_bin % 4
    else:
        lead = 0
    print format(i, "0"+str(lead+len_bin)+"b")
    i+=1

上面的代码将从 in 并显示带有前导零的二进制文件。

更像 pythonic 的方法是

for k in range(7): #range's stop is not included

    print('{:04b}'.format(k))

这使用 Python 的字符串格式化语言 (https://docs.python.org/3/library/string.html#format-specification-mini-language)

要以四个为一组打印更大的数字,请使用类似

的方法
for k in range(20): #range's stop is not included

    # https://docs.python.org/3/library/string.html#format-specification-mini-language

    if len('{:b}'.format(k)) > 4:
        print(k, '{:08b}'.format(k))
    else:
        print('{:04b}'.format(k))

您甚至可以使用字符串格式化语言本身和等式 y = 2^x 动态调整格式化术语 '{:08b}' 以适用于任何整数:

from math import ceil

for k in range(300):

    print(k, '{{:0{:.0f}b}}'.format(ceil((len(bin(k))-2)/4)*4).format(k))