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

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

https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682

import sys
bins1 = [int('10000000', 2), int('11000000', 2), int('11100000', 2), int('11110000', 2), int('11111000', 2), int('11111100', 2), int('11111110', 2), int('11111111', 2)]
bins = [int('00000000', 2), int('10000000', 2), int('11000000', 2), int('11100000', 2), int('11110000', 2), int('11111000', 2), int('11111100', 2), int('11111110', 2), int('11111111', 2)]
bins2 = [int('00000000', 2), int('10000000', 2), int('11000000', 2), int('11100000', 2), int('11110000', 2), int('11111000', 2), int('11111100', 2), int('11111110', 2)]
def check(net):
    each = net.split('.')
    if each[0] == '' or each[1] == '' or each[2] == '' or each[3] == '':
        return False
    else:
        if int(each[0]) in bins1 and int(each[1]) == 0 and int(each[2]) == 0 and int(each[3]) == 0:
            return True
        elif int(each[0]) == 255 and int(each[1]) in bins and int(each[2]) == 0 and int(each[3]) == 0:
            return True
        elif int(each[0]) == 255 and int(each[1]) == 255 and int(each[2]) in bins and int(each[3]) == 0:
            return True
        elif int(each[0]) == 255 and int(each[1]) == 255 and int(each[2]) == 255 and int(each[3]) in bins2:
            return True
        else:
            return False


ips = []
nets = []
for line in sys.stdin:
    ip, net = line.split("~")
    ips.append(ip)
    nets.append(net[:-1])
i = -1
A, B, C, D, E, R, P = 0, 0, 0, 0, 0, 0, 0
for ip in ips:
    i += 1
    each = ip.split(".")
    if each[0] == '' or each[1] == '' or each[2] == '' or each[3] == '':
        R += 1
    else:
        if int(each[0]) >= 1 and int(each[0]) <= 126:
            if check(nets[i]):
                A += 1
            else:
                R += 1
        elif int(each[0]) >= 128 and int(each[0]) <= 191:
            if check(nets[i]):
                B += 1
            else:
                R += 1
        elif int(each[0]) >= 192 and int(each[0]) <= 223:
            if check(nets[i]):
                C += 1
            else:
                R += 1
        elif int(each[0]) >= 224 and int(each[0]) <= 239:
            if check(nets[i]):
                D += 1
            else:
                R += 1
        elif int(each[0]) >= 240 and int(each[0]) <= 255:
            if check(nets[i]):
                E += 1
            else:
                R += 1
        if (
            int(each[0]) == 10
            or (int(each[0]) == 172 and int(each[1]) >= 16 and int(each[1]) <= 31)
            or (int(each[0]) == 192 and int(each[1]) == 168)
        ):
            if check(nets[i]):
                P += 1
print(f'{A} {B} {C} {D} {E} {R} {P}')

全部评论

相关推荐

mjasjon:这种trash中厂 简历过筛概率比大厂还低(除阿里系)
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务