常用的逻辑运算有And(表示为&),Or(表示为|),Not(表示为!),他们的逻辑是:
1&1=1 1&0=0 0&1=0 0&0=0
1|1=1 1|0=1 0|1=1 0|0=0
!0=1 !1=0
其中,他们的优先关系为:Not(!)>And(&)>Or(|);
例如:
A|B&C 实际是 A(B&C)
A&B|C&D 实际是 (A&B)|(C&D)
!A&B|C 实际是 ((!A)&B)|C
输入描述
1.测试用例中间无空格,无需考虑空格
2.测试用例表示式中只会出现如下字符:
0,1,(,),&,|,!
3.测试用例所给的输入输出都是合法的。无需考虑非法输入。
4.测试用例表达式长度不会超过128个字符。
5.括号可以嵌套。
例如:
1|(1&0) = 1
1&0|0&1 = 0
!0&1|0 = 1
((!0&1))|0 = 1
import timedef logic(string):str = []while string.count(")") > 0: #消除字符串中的括号if string[0] != ")":str.append(string[0])string = string[1:]else:string = string[1:]temp = []while str[-1] != "(":temp.insert(0, str.pop())str.pop()str.append(logic1(temp))while len(string) > 0: #对括号全被消除后的字符串进行整理str.append(string[0])string = string[1:]return logic1(str)#对不含括号的字符串进行逻辑运算
def logic1(alist):while len(alist) > 1:k = 0 #计算"!"运算符while "!" in alist:if alist[k] == "!":alist.pop(k)alist[k] = 1 - int(alist[k])k += 1k = 1 #计算"&"运算符while "&" in alist:if alist[k] == "&":alist.pop(k)alist[k-1] = int(alist[k-1]) * int(alist[k])alist.pop(k)else:k += 1k = 1 #计算"|"运算符while "|" in alist:if alist[k] == "|":alist.pop(k)alist[k-1] = (1 - (1 - int(alist[k-1])) * (1 - int(alist[k])))alist.pop(k)else:k += 1return alist[0]if __name__ == "__main__":start_time = time.time()print(logic("1|(1&0)"))print(logic("1&0|0&1"))print(logic("!0&1|0"))print(logic("((!0&1))|0"))end_time = time.time()print(end_time - start_time)