views:

68

answers:

3

Say I get a random number between 1 and 127. I change the number to binary and remove the 0b from it with the fallowing 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?

+6  A: 

No you don't.

>>> '{0:07b}'.format(12)
'0001100'
Ignacio Vazquez-Abrams
+1: this avoids the conversion to binary, which might change in the future.
EOL
I'm a little stunned -- I've been using Python for a couple of years and have never seen str.format() before. I've always used C-style formatted print in Python, which, as it happens, doesn't support binary.
Russell Borogove
@Russell: It's new in 2.6.
Ignacio Vazquez-Abrams
A: 

Try this:

for i in range(1, 127):
'0'*(7-len(bin(i)[2:]))+bin(i)[2:]
nazmul hasan
The built-in `zfill()` does exactly this…
EOL
+4  A: 

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

>>> '1'.zfill(7)
'0000001'
>>> '10010'.zfill(7)
'0010010'
Nas Banov