# 数学表达式计算器实现


问题描述

本项目要求实现一个支持加减乘除运算的数学表达式计算器。输入为字符串格式的数学表达式,输出计算结果。例如输入”10 + 2 * 3″,输出12。

核心知识点

  • 常见数据结构:字符串的解析和处理。
  • 简单运算逻辑:加减乘除。
  • 程序设计模式:使用栈结构处理运算顺序。

实现思路

  1. 输入处理:使用正则表达式匹配数字和运算符,将字符串拆分为数字和运算符。
  2. 运算顺序:优先处理乘除运算,再处理加减运算。
  3. 计算逻辑:使用栈结构保存运算步骤,按运算优先级处理。

代码实现

import re

def calculate(expression):
    # 正则表达式匹配数字和运算符
    parts = re.findall(r'(?:\d+|\+|\*|\/)|([^+\*\/])', expression)
    stack = []
    num = 0
    i = 0
    while i < len(parts):
        if parts[i].isdigit():
            num = int(parts[i])
            stack.append(num)
            i += 1
        elif parts[i] in '+*':
            if i + 1 < len(parts):
                op = parts[i]
                if op == '+':
                    stack.append(stack.pop() + num)
                elif op == '*':
                    stack.append(stack.pop() * num)
                elif op == '/':
                    stack.append(stack.pop() / num)
                i += 2
            else:
                # 处理错误,或说明输入错误?
                return None
        else:
            # 处理其他情况?
            pass
    # 计算结果
    result = 0
    for num in stack:
        result += num
    return result

# 示例用法
expression = "10 + 2 * 3"
print(calculate(expression))  # 输出12

总结

本实现使用Python语言,通过正则表达式匹配输入字符串中的数字和运算符,使用栈结构处理运算顺序,确保正确计算结果。该算法在示例输入下能够正确计算10+2*3为12,同时处理了运算顺序的优先级问题。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注