不使用列表实现二进制转十进制时输出结果异常,如何定位错误?
代码错误分析
- 核心错误点1:
str_n.index(j)的逻辑不符合预期。index()方法永远返回目标字符第一次出现的索引,你的输入11011011第一个'1'的索引是0,所有'1'的计算都变成加2^0=1,输入总共有6个'1',所以最终输出为6。 - 逻辑错误点2:即使能正确拿到每个字符的遍历下标,二进制权重方向也和字符串下标方向相反。字符串从左到右的下标依次为0~7,对应二进制数的最高位到最低位,权重应该是
2^(总长度-1 - 下标),而非你写的2^下标。
修正后可正常运行的代码
def b_num(n): result = 0 str_n = str(n) bit_length = len(str_n) # 同时获取遍历下标和对应字符 for idx, bit in enumerate(str_n): if bit == '1': result += 2 ** (bit_length - 1 - idx) print(result) b_num(11011011)
运行上述代码会输出预期结果219。
内容的提问来源于stack exchange,提问作者Stack.A
相关产品推荐
相关产品推荐

