输入字符串进行逻辑运算,输入只有0,1,()和逻辑运算符号(&,|,!),如:1|0&(!1|0(!(0&1)),输出结果(0或1),具体如图。
def run():
s = input()
print('res:',count(s))
def count(string):
strx = string
if len(strx) <= 3:
return count_x(strx)
have_bk, i, j = find_the_first_brackets(strx)
if have_bk:
strxx = count(strx[i+1:j])
return count(strx.replace(strx[i:j+1], str(strxx)))
elif len(strx) > 3:
strxx = add_bk(strx)
return count(strxx)
def add_bk(strx):
if '!' in strx:
i = strx.index('!')
strx = strx[:i]+'('+ strx[i:i+2]+')'+ strx[i+2:]
return strx
elif '&' in strx:
i = strx.index('&')
strx = strx[:i-1]+'('+ strx[i-1:i+2]+')'+ strx[i+2:]
return strx
elif '|' in strx:
i = strx.index('|')
strx = strx[:i-1]+'('+ strx[i-1:i+2]+')'+ strx[i+2:]
return strx
def find_the_first_brackets(string):
idx_begin = 0
idx_end = 0
for i,x in enumerate(string):
if x == '(':
idx_begin = i
if x == ')':
idx_end = i
return True, idx_begin, idx_end
return False, idx_begin, idx_end
def count_x(string):
if '!' in string:
return 1 - int(string[1])
elif '&' in string:
return int(string[0]) and int(string[2])
elif '|' in string:
return int(string[0]) or int(string[2])
if __name__ == '__main__':
run()