2

我正在编写一个将整数转换为二进制的程序,除了一件事之外,一切都运行良好。我将二进制数存储在一个列表中,因此我想使用该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)。我特意返回了连接变量来证明这一点(final_answer 变量就像我说的那样反转了字符串)。如前所述,它与其余代码无关,因为当我自己执行此操作时会得到相同的结果。那么如何在不神秘地将 1 转换为 0 的情况下使其正确打印出来,但同时确保列表仍然被加入。

4

2 回答 2

2

您的代码原样什么都不做,因为它从不调用Binary.

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

我注释掉了向后的使用,因为它没有被提供并且实际上Binaryb=Binary(200)andprint(b)和 get调用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)
于 2013-09-08T17:00:40.757 回答
2
def binary(i):
    i, n = divmod(i, 2)
    n = str(n)
    if i == 0:
        return n
    return binary(i) + str(n)
于 2013-09-08T17:31:22.037 回答