我正在python中制作一个函数,该函数应该将Decimal(10)转换为Binary(2);
因为它应该显示在小屏幕(计算器)上,所以我想按字节分割输出字节(8乘8)。现在,我使用转换为字符串的列表以水平显示结果。
我尝试垂直显示,每8个字符暂停一次。 (它可以工作,但我想水平显示);
还尝试显示列表,并每8个字符将其清除一次,但没有成功。
def dectobin(dec):
maxbin = 7
maxdec = 2**maxbin
dec2 = dec
bin = []
#Define default maximum values
#for the Binary and Decimal numbers
#starting from one Byte
dec = abs(dec)
#Negative value to positive value
while dec > maxdec:
maxbin = maxbin+8
maxdec = 2**maxbin
#Define the actual maximum values
#for the Binary and Decimal numbers
#incremented in Bytes
while maxbin != -1:
#Set the loop to stop at final bit
b = dec-2**maxbin
#Saving dec into another var
#in order to do the tests
if b < 0:
bin.append("0")
#If dec < maxbin value, it's a 0
else:
bin.append("1")
#If dec > maxbin value, it's a 1
dec=b
maxbin = maxbin-1
#Decrease the bit
bin = " ".join(bin)
print(dec2, "=", bin)
例如,如果我输入“ 259”,我想拥有
259 = 00000001
00000011
代替
259 = 0000000100000011
答案 0 :(得分:3)
您可以对bin
进行切片以获得所需的结果。在打印到以下位置之前立即修改代码:
bin = "".join(bin)
bin = "\n".join([bin[i:i+8] for i in range(0, len(bin), 8)])
print(dec2, "=", bin)
这将为您提供:
259 = 00000001
00000011
这背后的逻辑是什么?
在第一行中,您使用join
创建一个具有所有二进制数字的字符串,并用一个空格字符分隔。这意味着每8位之间有8个空7个空字符,构成切分bin时需要考虑的总共15个字符。因此,我使用16来每15个字符进行切片,以获得所需的结果。
我建议您将bin = " ".join(bin)
更改为bin = "".join(bin)
,以使分隔符为空字符串,并且将列表每8个字符分割一次,这对您来说是正常且易于理解的。随时问其他问题。