首页 > 解决方案 > 如何在多个部分中剪切列表或显示

问题描述

我正在 python 中创建一个函数,应该将 Decimal(10) 转换为 Binary(2);

因为它应该显示在小屏幕(计算器)上,所以我想将输出字节拆分为每个字节(8 x 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

标签: pythonpython-3.x

解决方案


您可以切片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 个空字符,总共形成 15 个字符,在切片 bin 时需要考虑。因此,我使用 16 对每 15 个字符进行切片并得到你想要的结果。

我建议您更改bin = " ".join(bin)为,bin = "".join(bin)以便分隔符为空字符串,并每隔 8 个字符拆分一次列表,这对您来说是正常且更具可读性的。随意问其他任何事情。


推荐阅读