如何在多个部分中剪切列表或显示

时间:2018-12-30 13:22:11

标签: python python-3.x

我正在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

1 个答案:

答案 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个字符分割一次,这对您来说是正常且易于理解的。随时问其他问题。