主要功能:

  1. 实现基本的加、减、乘、除四则运算;
  2. 支持小数、负数的运算;
  3. 支持括号计算;
  4. 支持连续计算。

实现:

  1. 读取用户输入的表达式;
  2. 将表达式转化为逆波兰表达式;
  3. 计算逆波兰表达式的结果;
  4. 输出计算结果。

具体实现过程:

  1. 读取用户输入的表达式,可以使用input()函数实现;
  2. 将表达式转化为逆波兰表达式,可以使用栈(Stack)来实现;
    1. 遍历表达式,遇到数字直接输出;
    2. 遇到运算符,判断栈顶运算符的优先级是否大于等于当前运算符,如果是,则将栈顶运算符弹出并输出,再将当前运算符压入栈中;
    3. 遇到左括号,直接将其压入栈中;
    4. 遇到右括号,不断弹出栈顶元素并输出,直到遇到左括号,将左括号弹出但不输出;
    5. 遍历结束后,将栈中剩余的运算符依次弹出并输出。
  3. 计算逆波兰表达式的结果,可以使用栈(Stack)来实现;
    1. 遍历逆波兰表达式,遇到数字就将其压入栈中;
    2. 遇到运算符,就弹出栈顶的两个元素进行计算,然后将计算结果压入栈中;
    3. 遍历结束后,栈中只剩下了一个元素,就是计算结果。
  4. 输出计算结果,使用print()函数即可。

完整代码实现如下:

# 定义运算符优先级
priority = {'+': 1, '-': 1, '*': 2, '/': 2}

# 将中缀表达式转换为逆波兰表达式
def infix_to_postfix(expression):
    stack = []
    postfix = []
    for ch in expression:
        if ch.isdigit() or ch == '.':
            postfix.append(ch)
        elif ch in priority:
            while stack and stack[-1] in priority and priority[stack[-1]] >= priority[ch]:
                postfix.append(stack.pop())
            stack.append(ch)
        elif ch == '(':
            stack.append(ch)
        elif ch == ')':
            while stack and stack[-1] != '(':
                postfix.append(stack.pop())
            if stack and stack[-1] == '(':
                stack.pop()
    while stack:
        postfix.append(stack.pop())
    return postfix

# 计算逆波兰表达式的值
def postfix_eval(postfix):
    stack = []
    for ch in postfix:
        if ch.isdigit() or ch == '.':
            stack.append(float(ch))
        elif ch in priority:
            b = stack.pop()
            a = stack.pop()
            if ch == '+':
                stack.append(a + b)
            elif ch == '-':
                stack.append(a - b)
            elif ch == '*':
                stack.append(a * b)
            elif ch == '/':
                stack.append(a / b)
    return stack[0]

# 主函数,读取用户输入的表达式并输出结果
def main():
    expression = input('请输入表达式:')
    postfix = infix_to_postfix(expression)
    result = postfix_eval(postfix)
    print('计算结果为:', result)

if __name__ == '__main__':
    main()
``

原文地址: https://www.cveoy.top/t/topic/creh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录