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

带异常检测的计算器代码故障:符号校验被跳过且未执行计算求助

你的计算器符号校验问题分析与修复方案

问题定位

你的代码主要存在以下几个逻辑和语法错误,导致符号校验失效、计算流程异常:

  • 符号校验逻辑错误:if i in num1 or num2: 的写法完全不符合预期,实际等价于 (i in num1) or num2,只要num2不为空就会触发条件,直接误判为非法符号。
  • 全局变量作用域与重置问题:NoSym作为全局变量,在函数内修改时未声明global,且每次校验前没有重置为True。一旦触发过一次非法符号,后续所有计算都会直接判定为非法。
  • 运算符判断逻辑混乱:最后分支的if cal != fo[0] and fo[1] and fo[2] and fo[3]: 写法错误,只要输入不是+,就会进入该分支输出no,干扰正常计算流程。
  • 递归调用的潜在风险:每次操作后递归调用calc(),容易触发递归深度限制,不如循环结构稳定。

修复后的代码

sym = "!@#$%?"
fo = ["+", "-", "*", "/"]

def calc():
    while True:
        cal = input("请输入运算符(+/-/*/):")
        # 判断是否为有效运算符
        if cal not in fo:
            print("无效运算符,请重新输入")
            continue
        
        num1 = input("num1 - ")
        num2 = input("num2 - ")
        
        # 检查输入是否包含字母
        if num1.isalpha() or num2.isalpha():
            print("输入不能包含字母,请重新输入")
            continue
        
        # 检查输入是否包含非法符号
        has_invalid_sym = False
        for i in sym:
            if i in num1 or i in num2:
                has_invalid_sym = True
                break
        if has_invalid_sym:
            print("输入不能包含非法符号(!@#$%?),请重新输入")
            continue
        
        # 执行计算(增加异常捕获和除数为0判断)
        try:
            num1 = float(num1)
            num2 = float(num2)
            if cal == "+":
                ans = num1 + num2
            elif cal == "-":
                ans = num1 - num2
            elif cal == "*":
                ans = num1 * num2
            elif cal == "/":
                if num2 == 0:
                    print("除数不能为0,请重新输入")
                    continue
                ans = num1 / num2
            print(f"计算结果:{ans}")
        except ValueError:
            print("输入不是有效的数字,请重新输入")

calc()

修复说明

  1. 用while True循环替代递归,避免递归深度溢出问题,流程更直观可控。
  2. 移除全局变量NoSym,改用局部变量has_invalid_sym,每次校验前自动重置,彻底解决作用域问题。
  3. 修正符号校验逻辑为if i in num1 or i in num2:,确保准确检测非法符号。
  4. 用cal not in fo直接判断无效运算符,逻辑清晰不易出错。
  5. 增加try-except捕获数字转换异常(比如输入多个小数点),同时补充除法的除数为0判断,提升程序鲁棒性。
  6. 优化输入提示文字,让用户更清楚该输入什么。

内容的提问来源于stack exchange,提问作者TheAX 0198

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:26:00