我的Python程序应该从二进制转换为十进制有什么问题?

时间:2015-03-15 01:00:50

标签: python binary decimal

我们应该编写一个从二进制字符串转换的“简单”程序。当给定空字符串时,它也应该返回0。我提前道歉,因为我缺乏知识。我对此完全陌生。

这是我的尝试:

def b(binaryString):
   if binaryString[0] !=0 or binaryString[1] !=1:
       return 0
   else:
       x = int(binaryString[1])
       a = (len(binaryString)) - 1
       return x * 2**a + b(binaryString[1:])

样本输入:b('1101')

预期产出:13

实际输出:IndexError:字符串索引超出范围

2 个答案:

答案 0 :(得分:1)

可能不是最优雅的解决方案......但是,这是我的两分钱

def b(binaryString):
 if len(binaryString):
    try:
        return sum([int(num)*2**(idx) for idx,num in enumerate(reversed(binaryString))])
    except ValueError:
        return "Your input might be incorrect"
 else:
    return "0"



print(b("111")) #returns 7
print(b(""))    #returns 0
print (b("11111101111")) #returns 2031

答案 1 :(得分:1)

def b(binaryString):
    if len(binaryString) == 0: return 0
    rest, lsb = binaryString[:-1], binaryString[-1]
    lsb = 1 if lsb == '1' else 0      # Alternatively, lsb = int(lsb)
    return (b(rest) << 1) + lsb       # Alternatively, return b(rest) * 2 + lsb

其中:

print b('1101')      # 13
print b('')          # 0
print b('11111111')  # 255
print b('10')        # 2
print b('01')        # 1

代码将输入字符串拆分为两个变量restlsb

rest包含输入字符串,最多但不包括最后一位。

lsb包含最低有效位(字符串中的最后一位)。它已在以下行中转换为int

函数的返回值为b(rest)向上移位1位(= * 2)加上整数值lsb。

值得注意的是,你可以&#34;作弊&#34;用简单的东西:

def b(binaryString):
    return int('0' + binaryString, base=2)