33

Say I get a random number between 1 and 127. I change the number to binary and remove the 0b from it with the following code:

key_one= int(raw_input("Enter key (0 <= key <= 127): "))

if key_one in range(128):
    bin_key_one=bin(key_one)[2:]
print bin_key_one
else:
    print "You have to enter key (0 <= key <= 127)"

Now I want to make it 7-characters long by padding the beginning with zeros as necessary. I think I need to use a for loop, but can someone show me how to do it?

Viglione
  • 4,942
  • 2
  • 21
  • 45
babikar
  • 501
  • 3
  • 6
  • 8
  • 1
    `if key_one in range(128)` could simply be replaced by `if 0 <= key_one <= 127` (which is more general, because it easily accommodates numbers much larger than 127). – Eric O Lebigot Jul 15 '10 at 07:28

7 Answers7

87

No you don't.

>>> '{0:07b}'.format(12)
'0001100'
Ignacio Vazquez-Abrams
  • 740,318
  • 145
  • 1,296
  • 1,325
36

So it happens that Python has a string method .zfill() for that:

>>> '1'.zfill(7)
'0000001'
>>> '10010'.zfill(7)
'0010010'
Nas Banov
  • 27,225
  • 6
  • 45
  • 67
6

With Python 3.6's new f-strings, you can now do:

key_one = int(input("Enter key (0 <= key <= 127): "))

if key_one in range(128):
    bin_key_one = f'{key_one:07b}'
    print(bin_key_one)
else:
    print("You have to enter key (0 <= key <= 127)")
cjauvin
  • 3,083
  • 3
  • 25
  • 33
  • Great solution. Zero prefix fill for this solution: `print(f'{key_one:b}'.zfill(20))` where `key_one` is the base10 number you'd like to print in binary and `20` the max zero prefix length. – Roel Van de Paar Jan 30 '20 at 00:35
2

If you want variable length:

>>> n = 12
>>> l = 7
>>> bin(n)[2:].zfill(l)
'0001100'
Zach Langer
  • 111
  • 5
2

You can use str.rjust too if you want to be flexible on the character to use as padding rather than just 0:

>>> s = '111'
>>> s.rjust(8, '0')
'00000111'
>>> s.rjust(8, 'x')
'xxxxx111'
Loqz
  • 333
  • 4
  • 15
1

Once for my project i needed to convert an integer to binary with variable length of binary string so i did

num_bits = 12
num = 4
f'{num:0{num_bits}b}'

Output
000000000100

parv desai
  • 337
  • 5
  • 13
-2

Try this:

for i in range(1, 127):
'0'*(7-len(bin(i)[2:]))+bin(i)[2:]
Nazmul Hasan
  • 6,540
  • 13
  • 34
  • 36