You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:33:25