|
|
发表于 2024-11-1 17:24:06
|
显示全部楼层
要计算一个包含括号和基本运算符的表达式的值,可以使用“逆波兰表达式”(RPN)或“中缀表达式转后缀表达式”的方法。以下是一个简单的步骤来实现这个过程:
1. **将中缀表达式转换为后缀表达式**:使用栈来处理运算符的优先级和括号。
2. **计算后缀表达式的值**:再次使用栈来计算后缀表达式的值。
以下是一个简单的Python实现:
- def precedence(op):
- if op == '+' or op == '-':
- return 1
- if op == '*' or op == '/':
- return 2
- if op == '^':
- return 3
- return 0
- def apply_op(a, b, op):
- if op == '+': return a + b
- if op == '-': return a - b
- if op == '*': return a * b
- if op == '/': return a // b
- if op == '^': return a ** b
- def evaluate(expression):
- values = []
- ops = []
- i = 0
- while i < len(expression):
- if expression[i] == ' ':
- i += 1
- continue
- elif expression[i] == '(':
- ops.append(expression[i])
- elif expression[i].isdigit():
- val = 0
- while i < len(expression) and expression[i].isdigit():
- val = (val * 10) + int(expression[i])
- i += 1
- values.append(val)
- i -= 1
- elif expression[i] == ')':
- while len(ops) != 0 and ops[-1] != '(':
- val2 = values.pop()
- val1 = values.pop()
- op = ops.pop()
- values.append(apply_op(val1, val2, op))
- ops.pop()
- else:
- while (len(ops) != 0 and
- precedence(ops[-1]) >= precedence(expression[i])):
- val2 = values.pop()
- val1 = values.pop()
- op = ops.pop()
- values.append(apply_op(val1, val2, op))
- ops.append(expression[i])
- i += 1
- while len(ops) != 0:
- val2 = values.pop()
- val1 = values.pop()
- op = ops.pop()
- values.append(apply_op(val1, val2, op))
- return values[-1]
- # 示例使用
- expression = "3 + 5 * (2 - 8)"
- result = evaluate(expression)
- print(result)
复制代码
这个代码会计算给定的表达式并返回结果。请注意,整数除法使用的是`//`,这意味着结果会被截断为整数。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|