十进制转二进制函数异常排查:代码无法运行问题咨询
问题排查与修复方案
我来帮你梳理代码里的问题,你的十进制转二进制的思路是对的,但有两个关键细节没处理好,导致代码无法正常运行:
1. result变量未初始化,触发NameError
当输入的decimal_number不为0时,代码会进入else分支,直接执行while循环里的result = result + '0'或result = result + '1'——但此时result还没有被定义过,Python找不到这个变量,就会抛出NameError。
修复方法:在else块的开头,先给result赋初始空字符串:
else: result = '' # 新增初始化 while i > 0: # 后续代码不变
2. 二进制结果顺序颠倒
当前代码是把每次取余得到的二进制位追加到字符串末尾,但十进制转二进制的逻辑是:第一次取余得到的是二进制的最低位,最后一次取余得到的是最高位。比如输入十进制2,你的代码会输出01,但正确结果应该是10。
修复方法:把新的二进制位加到字符串的开头,而不是末尾:
if i % 2 == 0: result = '0' + result # 改为前置拼接 i = i//2 else : result = '1' + result # 改为前置拼接 i = i//2
修复后的完整代码
def binary_converter(decimal_number): i = decimal_number if i == 0 : result = '0' else : result = '' while i > 0: if i % 2 == 0: result = '0' + result i = i//2 else : result = '1' + result i = i//2 return result # strip()无实际作用,直接返回即可
测试验证
- 输入
0,返回'0',符合预期 - 输入
2,返回'10',符合预期 - 输入
5,返回'101',符合预期
内容的提问来源于stack exchange,提问作者위성률
相关产品推荐
相关产品推荐

