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

Python编写四则计算器仅能执行加法运算的问题排查

问题根因

代码始终执行加法的核心错误出在运算符判断的条件写法上:
你当前写的判断逻辑形如if op == "+" or "add" or "plus":,在Python的语法规则中,这类写法不会被解析为「op等于+,或者op等于add,或者op等于plus」,而是会被拆分为三个独立的布尔判断:

  1. op == "+"
  2. "add"
  3. "plus"
    Python中非空字符串的布尔值恒为True,因此不管你输入什么运算符,第一个if分支的条件永远为真,会直接执行加法逻辑并返回结果,后续的乘、除、减分支永远不会被触发。

除此之外现有代码还存在三个潜在问题:

  • 除法运算没有做除数为0的校验,输入0作为第二个数时会直接抛出ZeroDivisionError崩溃
  • 输入错误时调用subprocess重启自身的逻辑容易产生递归进程残留,鲁棒性很差
  • 函数定义中传入的result参数属于冗余参数,完全没有实际作用
修复后代码

直接替换原有代码即可,修复后的完整可运行代码如下:

import time

print("This is a calculator")
time.sleep(1)

def cal(num1, op, num2):
    op = op.strip().lower()
    if op in ("+", "add", "plus"):
        return num1 + num2
    elif op in ("*", "multiply", "star", "x"):
        return num1 * num2
    elif op in ("/", "divide", "slash"):
        if num2 == 0:
            return "错误:除数不能为0"
        return num1 / num2
    elif op in ("-", "subtract", "minus"):
        return num1 - num2
    else:
        return None

while True:
    try:
        num1 = float(input("Write a number of your choice: "))
        op = input("Choose an operator: + - * / (or you can write their names)")
        num2 = float(input("Write another number of your choice: "))
        res = cal(num1, op, num2)
        if res is None:
            print("运算符输入无效,请重新输入\n")
            continue
        print(res)
        break
    except ValueError:
        print("数字输入无效,请输入合法数值,重新输入\n")

修复点说明

  • 替换原有的错误条件判断逻辑,改用in做成员匹配,写法更简洁,从根源避免or连接常量导致的条件恒真问题;同时增加输入预处理,自动去除运算符前后空格、统一转小写,兼容用户输入的大小写、误输空格场景
  • 移除冗余的result传参,删除不必要的os/subprocess/sys依赖,减少不必要的资源开销
  • 新增除零校验,除数为0时直接返回友好提示,不会触发程序崩溃
  • 用当前进程内的循环+异常捕获替换原有的子进程重启逻辑,输入错误时直接提示重输,不会产生递归进程残留
  • 新增数字输入的异常捕获,用户误输入非数字内容时不会直接崩溃,提示后重新输入即可

内容的提问来源于stack exchange,提问作者alahmar alrafik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:36:17