这种转换为二进制文件有什么问题?

时间:2013-09-08 16:45:42

标签: python python-3.x

我正在编写一个将整数转换为二进制的程序,除了一件事,一切都运行良好。我将二进制数存储在列表中,因此我想使用join()函数将列表连接在一起。这也很有效,但是由于列表存储为整数,我必须将空字符串与二进制列表连接(同时将每个数字转换为字符串)。顺便说一句,它与其余的代码无关,因为我用独立的程序对它进行了实验,我仍然得到了相同的结果。代码如下:

import backwards

class Binary(object):
 binary=[1,2,4,8,16,32,64,128,256]
 answer=[]
 def __init__(self,enter):
  self.enter=enter
  if self.enter>256:
   self.alternative()

  elif self.enter<=256:
   self.calculate()

 def add(self,a,b):
  a.append(b)

 def clear(self):
  Binary.binary=[]

 def calculate(self):
  start=len(Binary.binary)
  start-=1
  on=1
  off=0

  while start>-1:

   if self.enter<Binary.binary[start]:
    self.add(Binary.answer,off)
    start-=1
   elif self.enter>=Binary.binary[start]:
    self.add(Binary.answer,on)
    self.enter-=Binary.binary[start]
    start-=1


 def alternative(self):
  current_max=256

  while Binary.binary[len(Binary.binary)-1]<self.enter:
   current_max*=2
   self.add(Binary.binary,current_max)

  self.calculate()


 def __str__(self):
  converted=""
  for i in Binary.answer:
   converted+=str(Binary.answer[i])

  joined=''.join(converted)
  final_answer=backwards.back(joined)
  return joined

a=int(input("Enter the decimal number you want to convert to binary:  "))
b=Binary(a)
print(b)

向后模块是我创建的一个基本上反转字符串的函数。基本上,问题是如果前两个二进制数以0开头,它将每隔1打印为0(因此打印出00000000)。我故意返回join变量来证明这一点(final_answer变量就像我说的那样反转字符串)。如前所述,它与其余代码无关,因为当我单独执行此操作时,我得到相同的结果。那么如何在没有神秘地将1s转换为0的情况下正确打印出来,同时确保列表仍然连接。

2 个答案:

答案 0 :(得分:2)

您的代码没有任何效果,因为它从不调用Binary

b=Binary   # needs to be b=Binary(200), for example, to be called.

我注释了向后使用,因为它没有提供,实际上用Binaryb=Binary(200)拨打print(b)并获取011001000,这对于200来说是正确的,所以我猜这个问题是你的反向模块,我们没有看到它。

您可以执行以下操作而不是所有此代码来获得相同的答案。 09b表示格式为九位数,前导零为二进制。

>>> format(200,'09b')
'011001000'

修改

发现错误。如您所述,Binary(54)打印全部为零。该错误位于__str__函数的这一行:

  for i in Binary.answer:
   converted+=str(Binary.answer[i])

i是实际数字(0或1),因此如果前两位数为零Binary.answer[i],则总是查找零。你想要:

  for i in Binary.answer:
   converted+=str(i)

答案 1 :(得分:2)

def binary(i):
    i, n = divmod(i, 2)
    n = str(n)
    if i == 0:
        return n
    return binary(i) + str(n)