二进制转换返回十进制值

时间:2018-02-23 13:46:19

标签: python python-2.7

我正在尝试显示所有可被5整除的二进制数,并且我能够成功显示它们。但输出是十进制格式,即使我已将它们转换为基数2(二进制)。

我的代码 -

user_input = raw_input("Enter three numbers separated by commas: ")
input_list = user_input.split(',')
decimal_list=[]
binary_list=[]
for i in input_list:
     decimal_list.append(int(i,2))
print decimal_list
for x in decimal_list:
    if x%5==0:
        binary_list.append(int(str(x),10))
print binary_list

我的输入

0000,0001,0010,0011,0100,0101,0110,0111,1000

输出 -

[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 5]

为什么我会 [0,5] 而不是 [0000,0101] ?我确实使用(int(str(x),10))将它们转换回二进制文件

1 个答案:

答案 0 :(得分:1)

当你有一个整数列表并且在其上使用print时,你就会在其上隐式调用list.__repr__()方法。

此方法创建一个字符串,其中包含整数 in base 10 ,以逗号分隔并用括号括起来。

如果要以二进制打印,可以创建一个特殊列表对象(继承自list)并更改其表示方式:

class BinaryList(list):
    def __repr__(self):
        return "[{}]".format(",".join("0b{:04b}".format(x) for x in self))

user_input = "0000,0001,0010,0011,0100,0101,0110,0111,1000"
input_list = user_input.split(',')
decimal_list=[]
binary_list=BinaryList()   # here we're using our special class
for i in input_list:
     decimal_list.append(int(i,2))
print(decimal_list)
for x in decimal_list:
    if x%5==0:
        binary_list.append(int(str(x),10))
print(binary_list)

打印:

[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0b0000,0b0101]

此列表是专门的:如果您在其中输入字符串,__repr__方法将因格式不兼容而失败。另请注意,我在表示中添加了0b前缀,以便能够复制/粘贴结果&保持正确的值,并避免将其与小数混合。