逻辑运算(华为笔试)

输入字符串进行逻辑运算,输入只有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()

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值