多位数的表达式求值代码
时间: 2024-03-23 20:41:43 浏览: 25
好的,这里是一个使用栈来计算后缀表达式值的 Python 代码:
``` python
def evaluate_expression(expression):
# 将中缀表达式转换为后缀表达式
postfix = infix_to_postfix(expression)
# 创建一个栈来计算后缀表达式的值
stack = []
# 遍历后缀表达式
for token in postfix:
# 如果是数字,则将其推入栈中
if token.isdigit():
stack.append(int(token))
# 如果是操作符,则弹出栈顶的两个数字进行计算,并将结果推入栈中
else:
num2 = stack.pop()
num1 = stack.pop()
result = evaluate_operator(num1, num2, token)
stack.append(result)
# 最后,栈顶元素即为后缀表达式的值
return stack.pop()
# 将中缀表达式转换为后缀表达式
def infix_to_postfix(expression):
# 运算符优先级
precedence = {'+': 1, '-': 1, '*': 2, '/': 2}
# 创建一个栈来保存运算符
stack = []
# 创建一个列表来保存后缀表达式
postfix = []
# 将中缀表达式转换为列表
tokens = expression.split()
# 遍历中缀表达式的每个token
for token in tokens:
# 如果是数字,则直接将其加入后缀表达式中
if token.isdigit():
postfix.append(token)
# 如果是左括号,则将其推入运算符栈中
elif token == '(':
stack.append(token)
# 如果是右括号,则弹出运算符栈中的运算符,直到遇到左括号
elif token == ')':
while stack[-1] != '(':
postfix.append(stack.pop())
stack.pop() # 弹出左括号
# 如果是运算符,则将其推入运算符栈中,直到栈顶的运算符优先级低于该运算符
else:
while stack and stack[-1] != '(' and precedence[token] <= precedence[stack[-1]]:
postfix.append(stack.pop())
stack.append(token)
# 将剩余的运算符依次弹出并加入后缀表达式中
while stack:
postfix.append(stack.pop())
return postfix
# 计算两个数字的运算结果
def evaluate_operator(num1, num2, operator):
if operator == '+':
return num1 + num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1 * num2
elif operator == '/':
return num1 / num2
```
你可以调用 `evaluate_expression` 函数来计算一个多位数表达式的值。例如,`evaluate_expression("3 + 4 * 5 - 6 / 2")` 将返回 20。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)