题意大概为:
实现逻辑运算计算器功能,逻辑运算符: !(非)、|(或)、&(与),其优先级为 !>&>|。
case中只会出现“0”、“1”、“(”、“)”、“!”、“&”、“|”,且无空格
这题的思路和四则运算计算器差不多,使用栈先将中缀表达式转化为后缀表达式,之后再对后缀表达式进行计算。只不过四则运算加上括号有三个运算优先级,而逻辑运算计算器加上括号则有四个优先级。所以再入栈弹栈时要注意优先级
def postfix_calcution(expression):
"""
计算后缀表达式
:param expression: 后缀表达式
:return: 计算结果
"""
stack = []
for i in expression:
if i.isnumeric():
stack.append(int(i)) # 若为数字,则存入栈中
else:
if i == '&': # 若为“&”操作符,从栈中弹出两个数字进行与运算,并将结果保存在在栈中
a = stack.pop()
b = stack.pop()
result = a & b
elif i == '|': # 若为“|”操作符,从栈中弹出两个数字进行或运算,并将结果保存在在栈中