代码将二进制转换为十进制

时间:2017-07-13 17:10:51

标签: python binary decimal

我写这段代码将二进制转换为十进制,这不是最好的代码,因为我是初学者。这是代码:

def bin_dec(a):
   binary_list = list(str(a))
   binary_list.reverse()
   g = 1
   double_list = [1]
   for i in binary_list:
       g = g * 2
       double_list.append(g)
   double_list.pop()
   l = 0
   ans = []
   while l < len(binary_list):
       g = binary_list[l]
       if g == "1":
           k = double_list[l]
           ans.append(k)
       l = l + 1
   return "Decimal Value : %r" % sum(ans)

如果你这样做,你得到一个“0”打印bin_dec(01101)输出=“0”但如果你这样做打印bin_dec(1101)输出是“13”

代码工作得很好,但问题是二进制数以零开始时如“00110”或“01010”Python立即将其更改为八进制数,导致代码失败,最终输出“0”I我试图用oct()函数改变变量“a”,但它也改变了不以0开头的二进制数。它们似乎只是使用raw_input之类的方式 a = raw_input("type Binary Number : ")但我不想这样做。我希望有人可以帮助我。我也不想使用任何python函数将二进制数转换为十进制数。感谢。

2 个答案:

答案 0 :(得分:3)

这个怎么样:

def bin_dec(a):
    result = 0
    for bit in a:
        result *= 2
        if bit == '1':
            result +=1
    return result

完全没有功能,甚至没有appendpopreverse! ; - &GT; 哦,但是你仍然必须使用raw_input - 除非你切换到Python {3}}。

答案 1 :(得分:3)

我喜欢简短的pythonic解决方案,所以你去吧

def bin_dec(a):
     return sum([int(a[-i])*2**(i-1) for i in range(1, len(a)+1)])

或者更短:

bin_dec <- lambda a: sum([int(a[-i])*2**(i-1) for i in range(1, len(a)+1)]))