调试二进制转十进制代码:Quera平台提交后报错求助
问题分析与代码修正
代码中的核心错误
- 逻辑混淆:十进制与二进制概念错误
你将a^b得到的十进制整数转成字符串后,错误地把这个字符串当作二进制位序列计算十进制值。比如a=3、b=5,异或结果是十进制6,转成字符串是"6",但二进制中不存在6这个数字,直接导致计算完全偏离需求。 - 权重计算逻辑错误
就算假设字符串是二进制,你的权重计算也不符合规则:正确的二进制转十进制是从右往左,第n位(从0开始)权重为2^n,而你从字符串长度开始计算2^i,最后除以2的写法只是巧合蒙对个别情况,逻辑不成立。 - 变量未初始化风险
若a或b不满足0 < a < 2^30、0 < b < 2^30的条件,变量s和z未定义,执行时会抛出NameError。
针对不同需求的正确代码
需求1:计算两个十进制整数的异或结果(直接输出十进制)
这是最符合你代码初始逻辑的需求,异或结果本身就是十进制,无需额外转换:
a = int(input()) b = int(input()) print(a ^ b)
需求2:输入两个二进制字符串,计算异或后转十进制
如果你的输入是二进制字符串,需要先转成十进制再异或:
a_bin = input().strip() b_bin = input().strip() a = int(a_bin, 2) b = int(b_bin, 2) print(a ^ b)
需求3:手动实现二进制字符串转十进制
如果需要手动完成二进制转十进制的功能,正确写法如下:
binary_str = input().strip() # 输入二进制字符串 decimal = 0 for idx, bit in enumerate(reversed(binary_str)): decimal += int(bit) * (2 ** idx) print(decimal)
内容的提问来源于stack exchange,提问作者نفیسه درویشی
相关产品推荐
相关产品推荐

