我正在编写一个将整数转换为二进制的程序,除了一件事,一切都运行良好。我将二进制数存储在列表中,因此我想使用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的情况下正确打印出来,同时确保列表仍然连接。
答案 0 :(得分:2)
您的代码没有任何效果,因为它从不调用Binary
。
b=Binary # needs to be b=Binary(200), for example, to be called.
我注释了向后使用,因为它没有提供,实际上用Binary
和b=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)