进制转换代码求助:语法错误排查及多进制转换功能完善
问题解决:进制转换作业代码修复与完善
现有代码核心问题
- 输入逻辑错误:第一个输入提示描述混乱,未实现数字最大位数限制
- 类型错误:将进制输入转为字符串后与
range比较,永远判定为无效,导致循环无法退出 - 变量未定义:直接使用
dec变量但未先将输入数字转换为十进制 - 缩进错误:
else块内代码未缩进,违反Python语法规则 - 语法错误:混用中文引号、存在无效代码片段(如
Float()、错误的print语句)
修复并完善后的代码
# 设置数字最大位数(可根据需求修改) MAX_DIGITS = 10 # 接收并验证用户输入的数字 while True: num_input = input(f"Enter a number (max {MAX_DIGITS} digits): ") if len(num_input) <= MAX_DIGITS: break print(f"Error: Number can't exceed {MAX_DIGITS} digits. Try again.") # 接收并验证原进制输入(2-16) while True: try: original_base = int(input("Enter the original base (2-16): ")) if 2 <= original_base <= 16: break print("Error: Base must be between 2 and 16. Try again.") except ValueError: print("Error: Please enter an integer.") # 将输入数字转换为十进制,处理无效数字异常 try: decimal_value = int(num_input, original_base) except ValueError: print(f"Error: '{num_input}' is not a valid number for base {original_base}.") exit() # 通用进制转换函数:十进制转任意2-16进制 def decimal_to_base(num, target_base): digit_chars = "0123456789ABCDEF" if num == 0: return "0" result = "" while num > 0: result = digit_chars[num % target_base] + result num = num // target_base return result # 转换为各目标进制 binary = decimal_to_base(decimal_value, 2) ternary = decimal_to_base(decimal_value, 3) quaternary = decimal_to_base(decimal_value, 4) octal = decimal_to_base(decimal_value, 8) hexadecimal = decimal_to_base(decimal_value, 16) # 按指定格式输出结果 print(f"{num_input} in base {original_base} is: {decimal_value} in base 10, {binary} in base 2, {ternary} in base 3, {quaternary} in base 4, {octal} in base 8, {hexadecimal} in base 16")
代码说明
- 输入验证:实现数字最大位数限制,同时对进制输入做类型和范围校验,处理非整数输入的异常
- 十进制转换:利用Python内置
int()函数的进制转换功能,同时捕获无效数字的异常情况 - 通用转换函数:自定义
decimal_to_base函数实现十进制到任意2-16进制的转换,清晰展示进制转换逻辑 - 输出扩展:在满足基础需求的同时,补充了三进制、四进制、八进制的转换输出,符合导师要求
内容的提问来源于stack exchange,提问作者MLW
相关产品推荐
相关产品推荐

