2010-07-15 18 views
11

Dire ottengo un numero casuale compreso tra 1 e 127. I cambiare il numero in binario e rimuovere il 0b da esso con il codice di fermo degli impianti:Conversione di un numero binario con una lunghezza fissa

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

Ora voglio per renderlo lungo 7 caratteri riempendo l'inizio con zeri secondo necessità. Penso di aver bisogno di usare un ciclo for, ma qualcuno può mostrarmi come farlo?

+1

'se key_one nell'intervallo (128) 'potrebbe essere semplicemente sostituito da' if 0 <= key_one <= 127' (che è più generale, perché può facilmente ospitare numeri molto più grandi di 127). – EOL

risposta

40

No, non è così.

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

+1: questo evita la conversione in binario, che potrebbe cambiare in futuro. – EOL

+0

Sono un po 'stordito - uso Python da un paio di anni e non ho mai visto str.format() in precedenza. Ho sempre usato la stampa in stile C in Python, che, come accade, non supporta il binario. –

+0

@Russell: è nuovo nel 2.6. –

-1

Prova questo:

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

Il 'zfill()' incorporato fa esattamente questo ... – EOL

19

Così accade che Python ha un metodo di stringa .zfill() per questo:

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

questo è eccellente !! – user3697665

0

Con Python 3.6 di nuova f-strings, ora è possibile farlo:

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