2010-07-15 5 views
11

sagen, dass ich eine Zufallszahl zwischen 1 erhalten und 127 ich die Nummer auf binäre ändern und die 0b von ihm mit der Brache Code entfernen:eine Zahl binär mit einer festen Länge Converting

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

Jetzt möchte ich um es 7-stellig lang zu machen, indem Sie den Anfang mit Nullen auffüllen. Ich denke, ich muss eine for-Schleife verwenden, aber kann mir jemand zeigen, wie es geht?

+1

'wenn Schlüssel_ein im Bereich (128) könnte 'einfach durch' if 0 <= key_one <= 127 'ersetzt werden (was allgemeiner ist, weil es leicht Zahlen aufnimmt, die viel größer als 127 sind). – EOL

Antwort

40

Nein, tun Sie nicht.

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

+1: Dies vermeidet die Umwandlung in Binärdateien, die sich in der Zukunft ändern können. – EOL

+0

Ich bin ein wenig betäubt - ich benutze Python seit ein paar Jahren und habe str.format() noch nie zuvor gesehen. Ich habe immer C-formatierten Druck in Python verwendet, der, wie es passiert, keine Binärdatei unterstützt. –

+0

@ Russell: Es ist neu in 2.6. –

-1

Versuchen Sie folgendes:

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

Das eingebaute 'zfill()' macht genau das ... – EOL

19

So kommt es, dass Python eine String-Methode .zfill() dafür hat:

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

das ist exzellent !! – user3697665

0

Mit Python 3.6 Der neue f-strings, können Sie jetzt tun:

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