接受用户输入的四则运算表达式,使用栈进行表达式求值。
时间: 2024-02-15 18:02:26 浏览: 27
好的,下面是一个 Python 实现,使用栈对四则运算表达式进行求值:
```python
# 定义运算符的优先级
precedence = {
'+': 1,
'-': 1,
'*': 2,
'/': 2,
}
def evaluate_expression(expr):
# 初始化操作数栈和运算符栈
operand_stack = []
operator_stack = []
for token in expr:
if token.isdigit():
# 如果是数字,则将其添加到操作数栈中
operand_stack.append(int(token))
elif token in '+-*/':
# 如果是运算符,则将其添加到运算符栈中
while operator_stack and precedence[operator_stack[-1]] >= precedence[token]:
apply_operator(operand_stack, operator_stack)
operator_stack.append(token)
# 处理剩余的运算符
while operator_stack:
apply_operator(operand_stack, operator_stack)
# 返回最终结果
return operand_stack.pop()
def apply_operator(operand_stack, operator_stack):
# 取出运算符和两个操作数
operator = operator_stack.pop()
operand2 = operand_stack.pop()
operand1 = operand_stack.pop()
# 根据运算符进行计算,并将结果添加到操作数栈中
if operator == '+':
result = operand1 + operand2
elif operator == '-':
result = operand1 - operand2
elif operator == '*':
result = operand1 * operand2
elif operator == '/':
result = operand1 / operand2
operand_stack.append(result)
```
这个函数接受一个四则运算表达式,并使用栈对其进行求值。它首先定义了运算符的优先级,并使用一个操作数栈和一个运算符栈来处理表达式。
对于表达式中的每个标记(数字或运算符),它检查该标记的类型。如果是数字,则将其添加到操作数栈中。如果是运算符,则将其添加到运算符栈中,并使用 `precedence` 字典来比较其优先级。如果栈顶的运算符的优先级大于或等于当前运算符的优先级,则从栈中取出运算符,并应用于操作数栈的两个操作数,直到栈顶的运算符的优先级小于当前运算符。
最后,当表达式中的所有标记都处理完后,它会处理剩余的运算符,直到运算符栈为空。最终,它从操作数栈中弹出结果,并返回它。
你可以像这样调用这个函数:
```python
expr = input("请输入四则运算表达式:")
tokens = expr.split()
result = evaluate_expression(tokens)
print("结果为:", result)
```
在这个例子中,我们首先接受用户输入的四则运算表达式,并使用 `split()` 函数将其拆分成单独的标记。然后,我们调用 `evaluate_expression()` 函数来对其进行求值,并输出结果。