2010-07-15 16 views
11

Di consigo un número aleatorio entre 1 y 127. puedo cambiar el número a binario y retire la 0b de ella con el código de barbecho:la conversión de un número binario con una longitud fija

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)" 

Ahora quiero para hacer que tenga 7 caracteres de longitud rellenando el comienzo con ceros, según sea necesario. Creo que necesito usar un bucle for, pero ¿alguien puede mostrarme cómo hacerlo?

+1

'if key_one en el rango (128) 'podría simplemente reemplazarse por' si 0 <= key_one <= 127' (que es más general, porque acomoda fácilmente números mucho más grandes que 127). – EOL

Respuesta

40

No, no es así.

>>> '{0:07b}'.format(12) 
'0001100' 
+0

+1: esto evita la conversión a binario, que podría cambiar en el futuro. – EOL

+0

Estoy un poco aturdido. He estado usando Python durante un par de años y nunca antes había visto str.format(). Siempre utilicé la impresión formateada estilo C en Python, que, por cierto, no es compatible con archivos binarios. –

+0

@Russell: Es nuevo en 2.6. –

-1

Prueba esto:

for i in range(1, 127): 
'0'*(7-len(bin(i)[2:]))+bin(i)[2:] 
+2

El 'zfill()' incorporado hace exactamente esto ... – EOL

19

Así sucede que Python tiene un método de cadena .zfill() para ello:

>>> '1'.zfill(7) 
'0000001' 
>>> '10010'.zfill(7) 
'0010010' 
+0

esto es excelente !! – user3697665

0

Con Python de nuevo f-strings 3.6, ahora se puede hacer:

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)") 
Cuestiones relacionadas