我写这段代码将二进制转换为十进制,这不是最好的代码,因为我是初学者。这是代码:
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函数将二进制数转换为十进制数。感谢。
答案 0 :(得分:3)
这个怎么样:
def bin_dec(a):
result = 0
for bit in a:
result *= 2
if bit == '1':
result +=1
return result
完全没有功能,甚至没有append
,pop
或reverse
! ; - &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)]))