自定义数字转二进制函数返回7位而非8位,不使用bin()如何实现?
问题根因
- 逻辑顺序错误:原代码先执行
number = number // 2再取余存储,丢失了当前数的最低位计算结果,是输出少了最后一位1的直接原因 - 适配缺陷:没有补前导0凑齐8位长度;原范围判断
range(0,255)不包含255,不符合0-255的输入要求;0值返回也未适配8位规则
修改后代码(固定循环8次,逻辑更简洁)
def number_to_byte(number): if not isinstance(number, int): raise TypeError if not 0 <= number <= 255: raise ValueError new_bin = [] temp = number # 固定计算8位,避免长度不足问题 for _ in range(8): new_bin.append(temp % 2) temp = temp // 2 # 存储顺序是低位到高位,反转后得到高位在前的8位结果 new_bin.reverse() return new_bin
可选修改方案(保留原有while循环逻辑)
def number_to_byte(number): if type(number) != int: raise TypeError # 范围调整为包含255 if number not in range(0, 256): raise ValueError new_bin = [] temp = number while temp: # 调整顺序:先取余再整除,避免丢失位 new_bin.append(temp % 2) temp = temp // 2 new_bin.reverse() # 补前导0凑足8位 return [0] * (8 - len(new_bin)) + new_bin
效果验证
输入对应数值后,两个版本的代码都会返回你预期的8位结果[0, 1, 1, 1, 1, 0, 1, 1],全程未调用bin()函数。
内容的提问来源于stack exchange,提问作者user16293709
相关产品推荐
相关产品推荐

