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

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

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

这里的主要难点是子网掩码的判断,并不是只有255和0,需要转换成二进制

import sys

def is_valid_ip(lst):
    try:
        if any(i == '' for i in lst):
            return False
        return all(0 <= int(i) <= 255 for i in lst) and len(lst) == 4
    except ValueError:
        return False
        
def is_valid_sm(lst):
    try:
        if any(i == '' for i in lst) or len(lst) != 4 :
            return False
        decimal_value = (int(lst[0]) << 24) + (int(lst[1]) << 16) + (int(lst[2]) << 8) + int(lst[3])
        _str=    '{:032b}'.format(decimal_value)
		
        if '1' not in _str or '0' not in _str or '01' in _str:
            return False
        
        return True
    except ValueError:
        return False

res = {
    'A': 0,
    'B': 0,
    'C': 0,
    'D': 0,
    'E': 0,
    'F': 0,
    'G': 0,
}

try:

    while True:
        ip, sm = input().split('~')
        ip_list = list(map(str, ip.split('.')))
        sm_list = list(map(str, sm.split('.')))

        if ip_list[0] in [0, 127,'0','127']:
            continue

        
        if not is_valid_ip(ip_list) or not is_valid_sm(sm_list):
            res['F'] += 1
            #print(f'{ip_list} {sm_list}')
            continue

        ip_list = list(map(int, ip_list))

        if ip_list[0] < 128:
            res['A'] += 1
            if ip_list[0] == 10 or (ip_list[0] == 172 and 31 >= ip_list[1] >= 16):
                res['G'] += 1
        elif ip_list[0] < 192:
            res['B'] += 1
        elif ip_list[0] < 224:
            res['C'] += 1
            if ip_list[0] == 192 and ip_list[1] == 168:
                res['G'] += 1
        elif ip_list[0] < 240:
            res['D'] += 1
        else:
            res['E'] += 1


except EOFError:
    val = list(map(str, res.values()))
    print(' '.join(val))

#在找工作求抱抱#
全部评论

相关推荐

头像
11-10 15:58
东北大学 Java
当时脑抽投了个数开
过关斩将结果败给排序:《卓越表现》
投递美团等公司10个岗位 > 你都收到了哪些公司的感谢信?
点赞 评论 收藏
分享
诨号无敌鸭:恭喜佬,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
温特w:恭喜
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务