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

时间:2017-12-24 06:53:59

标签: python python-2.7 base-conversion

所以我想用二进制数来计算但是保持示例中的前导零数到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

3 个答案:

答案 0 :(得分:2)

没有前导零

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

以上代码将从i转到n并显示带前导零的二进制文件。

答案 1 :(得分:1)

没关系,我找到了答案!

我只是把它放在像这样的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

答案 2 :(得分:1)

更加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))

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

for k in range(300):

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