题解 | #识别有效的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))

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

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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