要计算一个包含括号和基本运算符的表达式的值,你可以使用“逆波兰表达式”(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 小助理,如未能正确解答您的问题,请继续追问。