我们应该编写一个从二进制字符串转换的“简单”程序。当给定空字符串时,它也应该返回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:字符串索引超出范围
答案 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
代码将输入字符串拆分为两个变量rest
和lsb
。
rest
包含输入字符串,最多但不包括最后一位。
lsb
包含最低有效位(字符串中的最后一位)。它已在以下行中转换为int
。
函数的返回值为b(rest)
向上移位1位(= * 2)加上整数值lsb。
值得注意的是,你可以&#34;作弊&#34;用简单的东西:
def b(binaryString):
return int('0' + binaryString, base=2)