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

2024-09-25 08:30:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中创建一个函数,用来将十进制(10)转换为二进制(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

Tags: theto列表字节binvalue水平dec
1条回答
网友
1楼 · 发布于 2024-09-25 08:30:13

您可以切片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个字符,在切片时需要考虑这些字符。因此,我使用16来每15个字符切片一次,得到你想要的结果。你知道吗

我建议您将bin = " ".join(bin)改为bin = "".join(bin),这样分隔符将是一个空字符串,并且每8个字符分割一次列表,这对您来说是正常的,而且可读性更好。随便问别的。你知道吗

相关问题 更多 >