Python实现8位二进制数校验功能的代码问题排查
现有代码的问题
get8bit函数逻辑错误:while循环未起到持续校验作用,不管输入是否符合要求,第一次循环就会直接return结果;输入直接转int会丢失前导零,后续无法判断输入长度是否为8位;捕获所有异常的写法不规范,且错误提示和实际触发场景不匹配(只有输入非数字内容才会进入except分支,不是输入0/1以外的数字)。valid8bit函数存在多处错误:首先Python3不允许整型带前导零,validChoices = [00000000,11111111]本身就是语法错误;其次校验列表只包含全0和全1两种值,其余合法的8位二进制数(如00000001、10101010等)都会被判定为不合法;循环中判断x == validChoices是整型和列表比较,永远不成立,break分支永远无法触发,会陷入死循环;同样输入直接转int丢失前导零,无法校验长度。convertodeci函数转换逻辑完全错误,二进制转十进制不是对输入值做平方运算,转换规则完全不匹配。
正确实现逻辑
校验时先保留输入的字符串格式,先判断长度是否为8位,再判断所有字符是否只有0和1,两个条件都满足再做后续的进制转换即可,不需要拆分多个冗余函数,简化实现如下:
def get_valid_8bit_binary(): while True: input_str = input('请输入8位二进制数:').strip() # 校验长度是否为8位 if len(input_str) != 8: print('错误:输入长度必须为8位,请重新输入') continue # 校验是否仅包含0和1 if not all(c in ('0', '1') for c in input_str): print('错误:只能输入0和1组成的数字,请重新输入') continue # 校验通过后转十进制返回 return int(input_str, 2) # 调用测试 decimal_num = get_valid_8bit_binary() print(f'转换后的十进制值为:{decimal_num}')
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

