优化代码以提高中缀表达式计算效率
优化代码以提高中缀表达式计算效率
本文将介绍如何优化代码,以提高中缀表达式计算效率。我们将探讨以下几点优化方法:
- 减少数据弹入和弹出栈的次数: 在计算过程中,我们可以使用一个列表(数组)来替代栈,利用索引来表示栈顶位置,减少数据的移动。
- 将运算符的优先级定义为一个字典: 将运算符的优先级定义为一个字典,以运算符作为键,优先级作为值,避免多次调用
get_priority函数。 - 将运算符的处理逻辑封装为一个函数: 将运算符的处理逻辑封装为一个函数,减少重复代码。
以下是基于上述优化的示例代码:
def calculate(expression):
operators = []
operands = []
priority = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
def apply_operator():
b = operands.pop()
a = operands.pop()
operator = operators.pop()
if operator == '+':
operands.append(a + b)
elif operator == '-':
operands.append(a - b)
elif operator == '*':
operands.append(a * b)
elif operator == '/':
if b == 0:
raise ValueError('INVALID')
operands.append(a // b)
elif operator == '^':
result = 1
for _ in range(b):
result *= a
operands.append(result)
num = ''
for char in expression:
if char.isdigit():
num += char
else:
if num:
operands.append(int(num))
num = ''
if char == '(':
operators.append(char)
elif char == ')':
while operators[-1] != '(':
apply_operator()
operators.pop() # 弹出左括号
elif char in priority:
while operators and priority[char] <= priority[operators[-1]]:
apply_operator()
operators.append(char)
if num:
operands.append(int(num))
while operators:
apply_operator()
return operands[0]
# 读取输入的中缀表达式
expressions = []
while True:
try:
expression = input()
if not expression:
break
expressions.append(expression)
except EOFError:
break
# 计算并输出结果
for expression in expressions:
try:
result = calculate(expression)
print(result)
except ValueError as e:
print(str(e))
在优化后的代码中,使用列表(数组)来代替栈的数据结构,通过索引 [-1] 表示栈顶元素,避免了元素的移动。同时,将运算符的优先级存储为字典 priority,以运算符作为键,优先级作为值,避免了多次调用 get_priority 函数。运算符的处理逻辑被封装在 apply_operator 函数中,减少了重复代码。
这些优化可以进一步提高代码的运行效率和可读性。请尝试运行优化后的代码,并检查是否满足预期的输出结果。
如果你还有其他问题,请随时告诉我。
原文地址: https://www.cveoy.top/t/topic/iAC 著作权归作者所有。请勿转载和采集!