2010-07-15 177 views
11

说我让我变成二进制数字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 2010-07-15 07:28:26

回答

40

不,你不知道。

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

+1:这样可以避免转换为二进制文件,这在未来可能会发生变化。 – EOL 2010-07-15 07:32:00

+0

我有点惊呆了 - 我一直在使用Python几年,从未见过str.format()。我一直使用Python中的C风格格式化打印,碰巧它不支持二进制。 – 2010-07-15 07:35:41

+0

@Russell:这是2.6的新功能。 – 2010-07-15 07:36:11

-1

试试这个:

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

内置'zfill()'确实是这样的... – EOL 2010-07-15 07:30:41

19

所以它发生Python有一个字符串的方法.zfill()

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

这是非常好的! – user3697665 2017-05-26 20:23:01

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)") 
相关问题