2010-07-15 2 views
11

Say я получить случайное число от 1 до 127. Я изменить число в двоичную и удалить из него 0b с кодом парование:Преобразование числа в двоичную с фиксированной длиной

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

Теперь я хочу чтобы сделать его длиной 7 символов, заполнив начало нулями при необходимости. Я думаю, мне нужно использовать цикл for, но может ли кто-нибудь показать мне, как это сделать?

+1

'if key_one в диапазоне (128) 'можно просто заменить на' if 0 <= key_one <= 127' (что более общее, потому что оно легко вмещает числа, значительно большие, чем 127). – EOL

ответ

40

Нет, вы этого не сделаете.

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

+1: это позволяет избежать преобразования в двоичный файл, который может измениться в будущем. – EOL

+0

Я немного ошеломлен - я использовал Python уже пару лет и никогда раньше не видел str.format(). Я всегда использовал отформатированную печать в стиле C в Python, которая, как это бывает, не поддерживает двоичный файл. –

+0

@ Russell: Это новое в 2.6. –

-1

Попробуйте это:

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

Встроенный 'zfill()' делает именно это ... – EOL

19

Так случается, что Python имеет метод строку .zfill() для этого:

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

это отлично !! – user3697665

0

С Python 3,6-х новый f-strings, теперь вы можете сделать:

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