题解 | 识别有效的IP地址和掩码并进行分类统计

out = [0,0,0,0,0,0,0]

def is_err_mask(smask):
    # print(smask)
    s_bin = ''
    for mask_mem in smask:
        s_bin += bin(int(mask_mem))[2:].zfill(8)
    if ('01' in s_bin ) or ('1' not in s_bin) or ('0' not in s_bin):
        return True
    else:
        return False
  
    
def is_err_ip(sip):
    for s in sip:
        if not s.isdigit():
            return True
        elif not 0<= s.isdigit() <=255:
            return True
    return False

def private_ip(sip):
    if sip[0] == '10':
        return True
    if sip[0] == '172' and 16<=int(sip[1])<=31:
        return True
    if sip[0] == '192' and sip[1] == '168':
        return True
    return False

try:
    while True :
        s_ip,s_mask = input().split('~')
        # print(s_ip,s_mask)
        sip = s_ip.split('.')
        smask = s_mask.split('.')

        ## '127.*.*.*' or '0.*.*.*'  
        if sip[0] == '127' or sip[0]=='0':
            continue

        ## err mask
        if is_err_mask(smask):
            out[5] += 1
            continue

        ## err ip
        if is_err_ip(sip):
            out[5] += 1
            continue

        ## privat ip 
        if private_ip(sip):
            out[6] += 1
            # continue

        ip_mem_0 = int(sip[0])
        if 0<=ip_mem_0<=126:
            out[0] += 1
        elif 128<=ip_mem_0<=191:
            out[1] += 1
        elif 192<=ip_mem_0<=223:
            out[2] += 1
        elif 224<=ip_mem_0<=239:
            out[3] += 1
        elif 240<=ip_mem_0<=255:
            out[4] += 1
except:
    pass

for i in out:
    print(i,end=' ')


    



    








全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务