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