用户输入一个包含“+”、“-”、“*”、“/”、正整数和圆括号的合法算术表达式,计算该表达式的运算结果。
时间: 2023-12-01 07:39:52 浏览: 170
计算器(支持+,-,*,/)运算
根据提供的引用内容,可以通过以下步骤计算一个包含“+”、“-”、“*”、“/”、正整数和圆括号的合法算术表达式的运算结果:
1. 定义一个函数,接收一个字符串参数,表示算术表达式。
2. 定义一个栈,用于存储数字和运算符。
3. 遍历算术表达式中的每个字符,如果是数字,则将其转换为整数并入栈;如果是运算符,则将其与栈顶的运算符进行比较,如果优先级较高,则将其入栈;否则,将栈顶的运算符弹出并进行运算,直到栈顶的运算符优先级低于当前运算符。
4. 当遍历完整个算术表达式后,如果栈中还有运算符,则依次弹出并进行运算,直到栈为空。
5. 返回最终的计算结果。
以下是代码实现:
```python
# 定义一个函数,计算算术表达式的结果
def calculate(expression):
# 定义一个栈,用于存储数字和运算符
stack = []
# 定义一个变量,用于记录当前数字
num = 0
# 定义一个变量,用于记录当前运算符
operator = '+'
# 遍历算术表达式中的每个字符
for i in range(len(expression)):
# 如果是数字,则将其转换为整数并入栈
if expression[i].isdigit():
num = num * 10 + int(expression[i])
# 如果是左括号,则将当前数字和运算符入栈,并重置num和operator
if expression[i] == '(':
stack.append(num)
stack.append(operator)
num = 0
operator = '+'
# 如果是右括号,则先计算括号内的表达式,再将结果入栈
if expression[i] == ')':
if operator == '+':
stack.append(num)
elif operator == '-':
stack.append(-num)
elif operator == '*':
stack[-1] *= num
elif operator == '/':
stack[-1] = int(stack[-1] / num)
num = 0
while len(stack) > 0 and stack[-1] != '(':
num += stack.pop()
stack.pop()
# 如果是运算符,则将其与栈顶的运算符进行比较,如果优先级较高,则将其入栈;否则,将栈顶的运算符弹出并进行运算,直到栈顶的运算符优先级低于当前运算符
if expression[i] in ['+', '-', '*', '/']:
if operator == '+':
stack.append(num)
elif operator == '-':
stack.append(-num)
elif operator == '*':
stack[-1] *= num
elif operator == '/':
stack[-1] = int(stack[-1] / num)
num = 0
operator = expression[i]
# 将最后一个数字入栈
if operator == '+':
stack.append(num)
elif operator == '-':
stack.append(-num)
elif operator == '*':
stack[-1] *= num
elif operator == '/':
stack[-1] = int(stack[-1] / num)
# 计算栈中剩余的运算符
result = 0
while len(stack) > 0:
result += stack.pop()
return result
```
例如,对于输入字符串"2*(3+4)-5/2",调用calculate函数后,将返回结果13。
阅读全文