Python实现十进制转二进制时选项2无法输出正确二进制结果
十进制转二进制代码逻辑故障排查
你的代码无法输出正确二进制结果,是由多处逻辑错误共同导致的,问题点如下:
- 循环触发条件永远不成立:你将输入的十进制数先转为了
float类型,而while循环的判断条件包含isinstance(decimal, int),类型不匹配会直接跳过整个循环体,最终binary_string始终为空字符串。 - 计算顺序完全颠倒:转二进制的正确计算逻辑是先取当前数对2的余数得到当前二进制位,再将当前数整除2进入下一轮计算,你的代码先做除法再取余,得到的余数完全错位。
- 除法运算符使用错误:Python中普通除法
/的返回值永远是浮点数,即便能整除也会返回类似4.0的结果,应该使用整数整除运算符//才能得到整数类型的商。 - 截断操作无效:你写的
math.trunc(remainder)没有将截断后的结果赋值回变量,浮点数余数的截断操作根本没有生效,拼接字符串时会出现0.0、1.0这类不符合二进制格式的内容。 - 二进制位顺序错误:就算循环正常执行,你把每一步得到的余数直接追加到字符串末尾,最终得到的是低位在前高位在后的逆序结果,和正确二进制值完全相反。
- 缩进错误:最后的
print语句没有缩进在if the_option == 2的代码块内,选择其他功能选项时也会误触发打印逻辑。
修正后可运行代码
import math if the_option == 2: decimal_string = input("DECIMAL-STR> ") # 输入合法性校验 try: decimal = int(decimal_string) except ValueError: print("输入无效,请输入合法的十进制整数") else: # 单独处理0的特殊情况 if decimal == 0: binary_string = "0" else: binary_string = "" calc_num = abs(decimal) while calc_num > 0: remainder = calc_num % 2 calc_num = calc_num // 2 # 新计算出的高位直接拼在字符串最前面,无需后续反转 binary_string = str(remainder) + binary_string # 处理负数符号 if decimal < 0: binary_string = "-" + binary_string print(f"Decimal {decimal_string} is Binary {binary_string}")
内容的提问来源于stack exchange,提问作者Saiakash Sivasamy
相关产品推荐
相关产品推荐

