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

Python 3中实现基础数学运算(禁用eval/exec等语句执行函数)

手动实现基础数学运算的完整方案

看起来你已经开始手动实现基础数学运算了,这比用eval()安全多了!我来帮你把代码补全,还会加一些实用的异常处理和优化~

首先先把你写的部分代码放出来(看起来你写到乘法的时候中断了):

solutionlist = list(basicoperationslist)
for i in range(0, len(solutionlist)):
    if '+' in solutionlist[i]:
        y = solutionlist[i].split('+')
        solutionlist[i] = str(int(y[0]) + int(y[1]))
    elif '*' in solutionlist[i]:
        # 你还没写完这里的逻辑
        pass

完整实现代码

下面是补全后的版本,支持+、-、*、/四种基础运算,还处理了空格、非整数输入、除零错误等情况:

def calculate_basic_operations(basicoperationslist):
    # 复制输入列表,避免修改原数据
    solutionlist = list(basicoperationslist)
    # 定义支持的运算符,按顺序查找(单个表达式只支持一个运算符)
    supported_ops = ['+', '-', '*', '/']
    
    for idx in range(len(solutionlist)):
        expr = solutionlist[idx]
        current_op = None
        
        # 找到表达式中的运算符
        for op in supported_ops:
            if op in expr:
                current_op = op
                break
        
        # 如果没有找到运算符,跳过当前元素
        if not current_op:
            continue
        
        try:
            # 分割数字,strip()处理可能的空格(比如" 10 - 5 ")
            num1_str, num2_str = expr.split(current_op)
            num1 = int(num1_str.strip())
            num2 = int(num2_str.strip())
            
            # 根据运算符计算结果
            if current_op == '+':
                result = num1 + num2
            elif current_op == '-':
                result = num1 - num2
            elif current_op == '*':
                result = num1 * num2
            elif current_op == '/':
                if num2 == 0:
                    raise ZeroDivisionError("除数不能为0")
                # 这里可以选整数除法//或者浮点数除法/,按需修改
                result = num1 / num2
            
            # 把结果转成字符串替换原位置
            solutionlist[idx] = str(result)
        except ValueError:
            # 处理非整数输入的情况
            solutionlist[idx] = "错误:输入不是有效的整数"
        except ZeroDivisionError as e:
            # 处理除零错误
            solutionlist[idx] = f"错误:{str(e)}"
    
    return solutionlist

测试示例

你可以用下面的测试用例验证功能:

test_cases = ["3+5", "10 - 2", "4*6", "15/3", "8/0", "abc+12", "7"]
print(calculate_basic_operations(test_cases))

输出结果:

['8', '8', '24', '5.0', '错误:除数不能为0', '错误:输入不是有效的整数', '7']

额外优化建议

  • 如果需要支持先乘除后加减的运算顺序,那就要做更复杂的表达式解析,比如将中缀表达式转成后缀表达式(逆波兰表达式)再计算,这部分可以单独扩展
  • 如果需要支持更多运算符(比如取模%、幂运算**),只需要在supported_ops里添加,再补充对应的计算分支
  • 如果要支持浮点数输入,把int()改成float()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:19:01