Python 如何在多个部分中剪切列表或显示
我正在用python制作一个函数,用来将十进制(10)转换为二进制(2) 因为它应该显示在小屏幕(计算器)上,所以我想将输出字节按字节(8乘8)进行分割。现在,我使用一个转换为字符串的列表来水平显示结果 我尝试过垂直显示,每8个字符暂停一次。(它工作了,但我希望有一个水平显示) 还试图显示列表并每8个字符清除一次,但未能成功Python 如何在多个部分中剪切列表或显示,python,python-3.x,Python,Python 3.x,我正在用python制作一个函数,用来将十进制(10)转换为二进制(2) 因为它应该显示在小屏幕(计算器)上,所以我想将输出字节按字节(8乘8)进行分割。现在,我使用一个转换为字符串的列表来水平显示结果 我尝试过垂直显示,每8个字符暂停一次。(它工作了,但我希望有一个水平显示) 还试图显示列表并每8个字符清除一次,但未能成功 def dectobin(dec): maxbin = 7 maxdec = 2**maxbin dec2 = dec bin = [] #Define
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 = 0000000100000011
您可以切片
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个字符拆分一次列表,这对您来说是正常且更具可读性的。请随意询问任何其他问题。您能否提供一个包含输入和所需输出的示例案例?@VasilisG。我添加了一个示例。我希望您使用的是python3,请将其添加到您的标记中,因为在复制代码时python2和python3的打印语句不同。它现在可以工作了!谢谢您能解释一下您添加的内容是如何工作的吗?@Mazeo当然,让我再编辑一次,以确保完全正确,我会通知您。在第一行中,您使用join
创建一个包含所有二进制数字的字符串,并用空格字符分隔。这意味着每8位之间就有8个空字符和7个空字符,形成了在切片bin
时需要考虑的总共15个字符。因此,我使用16
每15个字符切片一次,得到您想要的结果。我建议您将bin=“”.join(bin)
更改为bin=“”.join(bin)
,这样分隔符将是一个空字符串,并每8个字符拆分一次列表,这对您来说是正常且更具可读性的。请随意询问任何其他问题。@usr2564301感谢您的关注。我将把它添加到我的答案中。bin=“\n”。加入([bin[I:I+8]表示范围(0,len(bin),8)])而不是第2行,我更喜欢。
259 = 00000001
00000011