我正在尝试显示所有可被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))将它们转换回二进制文件
答案 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
前缀,以便能够复制/粘贴结果&保持正确的值,并避免将其与小数混合。