Python计算器学生项目专业评审及无限计算功能优化求助
Python计算器代码优化与无限计算实现
原代码存在的问题
- 条件判断逻辑错误:
if PhaseA == 'Y' or 'y'写法有误,or 'y'会被视为布尔值True,导致无论用户输入什么都会进入该分支,正确写法应判断输入是否为'Y'或'y'(可通过lower()统一转换) - 代码重复冗余:两次运算逻辑完全一致,重复编写大量
if-elif块,可维护性差 - 未实现真正的无限循环:尝试
while循环失败后手动复制代码,无法支持多次连续计算 - 异常处理缺失:未处理除法除零、输入非数字等异常情况,运算结果处理不一致(仅乘法用
round())
优化方案与代码实现
通过封装函数、引入while循环、完善异常处理,可大幅简化代码并实现无限计算功能:
def calculate(num1, operator, num2): """执行指定运算并返回结果""" if operator == "+": return num1 + num2 elif operator == "-": return num1 - num2 elif operator == "*": return round(num1 * num2) elif operator == "/": if num2 == 0: raise ValueError("不能除以零") return num1 / num2 else: raise ValueError("无效的运算符,请输入+,-,*,/") def get_valid_input(prompt, input_type=float): """获取有效输入,处理类型转换异常""" while True: try: user_input = input(prompt) if not user_input: print("程序结束") exit() return input_type(user_input) except ValueError: print("输入无效,请重新输入正确内容") # 初始化第一个计算值 current_result = get_valid_input("请输入第一个数字: ") while True: # 获取运算符 operator = input("输入运算符(+,-,*,/),直接回车结束程序: ") if not operator: print("程序结束") break # 获取下一个计算数字 next_num = get_valid_input("请输入下一个数字: ") # 执行计算并输出结果 try: current_result = calculate(current_result, operator, next_num) print(f"当前计算结果: {current_result}") except ValueError as e: print(f"计算出错: {e}") # 询问是否继续计算 continue_choice = input("是否继续计算?(Y/N): ").lower() if continue_choice != 'y': print("程序结束") break
优化后的优势
- 代码复用性强:所有运算逻辑集中在
calculate函数中,修改或新增运算只需改动一处 - 支持无限计算:通过
while True循环实现连续计算,每次自动将前一次结果作为下一次的起始值 - 程序更健壮:处理了非数字输入、除零、无效运算符等异常场景,避免程序崩溃
- 结构清晰易维护:拆分功能函数后,代码逻辑更直观,降低后续修改成本
内容的提问来源于stack exchange,提问作者Bell O.T.
相关产品推荐
相关产品推荐

