使用Python实现一种算数表达式求值的算法,模拟这种使用栈的方式,这是由E.W.Dijkstra在20世纪60年代发明的一种非常简单的算法。代码模拟仅仅表现一种编程思想,代码的逻辑并不完全:
if
__name__ == "__main__":
cal_str = input("请输入算数表达式(e.g.(((1+2)*(3+5))+2), 只适合简单的算数表达式):")
num_stack = []
symbol_stack = []
for chr in cal_str:
#print(chr)if chr == "(":
continueelif chr == ""or chr == "t"or chr == "n":
continueelif chr == "+":
symbol_stack.append(chr)
elif chr == "-":
symbol_stack.append(chr)
elif chr == "*":
symbol_stack.append(chr)
elif chr == "/":
symbol_stack.append(chr)
elif chr == "sqrt":
symbol_stack.append(chr)
elif chr == ")":
total_num = num_stack.pop()
now_symbol = symbol_stack.pop()
if now_symbol == "+":
total_num += num_stack.pop()
if now_symbol == "-":
total_num -= num_stack.pop()
if now_symbol == "*":
total_num *= num_stack.pop()
if now_symbol == "/":
total_num /= num_stack.pop()
num_stack.append(total_num)
else:
num_stack.append(int(chr))
print(num_stack.pop())
原文:https://www.cnblogs.com/frisk/p/11625347.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!