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

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

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

import sys
from collections import Counter

def valid_ip(ip):
    p = ip.split('.')
    if len(p) != 4:
        return False
    for _ in p:
        try:
            tmp = int(_)
        except:
            return False
        if not 0 <= tmp <= 255:
            return False
    return True

def valid_mask(mask):
    m = mask.split('.')
    if len(m) != 4:
        return False
    mb = ''
    for _ in m:
        try:
            tmp = int(_)
        except:
            return False
        if not 0 <= tmp <= 255:
            return False
        bt = bin(tmp)[2:]
        if tmp != 0 and len(bt) < 8:
            return False
        mb += bt
    lb = list(mb)
    lb = [int(_) for _ in lb]
    if sum(lb) in [0, 32]:
        return False
    while not lb.pop():
        pass
    return False if 0 in lb else True

def get_ip_type(ip):
    p = ip.split('.')
    p1 = int(p[0])
    if 1 <= p1 <= 126:
        return 'A'
    elif 128 <= p1 <= 191:
        return 'B'
    elif 192 <= p1 <= 223:
        return 'C'
    elif 224 <= p1 <= 239:
        return 'D'
    return 'E'

def is_private(ip):
    p = ip.split('.')
    p = [int(_) for _ in p]
    if p[0] == 10 or (p[0] == 172 and 16 <= p[1] <= 31) or (p[0] == 192 and p[1] == 168):
        return True
    return False


ct = Counter()
for line in sys.stdin:
    if line:
        ip, mask = line.split('~')
        ips = ip.split('.')
        if ips[0] in ['0', '127']:
            continue
        masks = mask.split('.')
        if not valid_mask(mask):
            ct['W'] += 1
            continue
        if valid_ip(ip):
            ct[get_ip_type(ip)] += 1
            if is_private(ip):
                ct['P'] += 1
        else:
            ct['W'] += 1

print(ct['A'], ct['B'], ct['C'], ct['D'], ct['E'], ct['W'], ct['P']) 

全部评论

相关推荐

头像
10-22 20:13
中南大学 Java
序言大家好呀。我是希晨er,一个初入职场的程序猿小登最近上班摸鱼刷到了一篇文章:10年深漂,放弃高薪,回长沙一年有感,还有聊聊30岁大龄程序员过往的心路历程,突然就有点感慨。我如今也做出了和大明哥一样的抉择,只是更早。此外我22年的人生,好像从来没好好记录过。正好现在工作不太忙,就想把这些经历写下来,也希望能得到社区里各位前辈的指点个人背景我是03年出生的西安娃,父母都是普通打工人。刚从中南大学软件工程专业毕业半年,现在在老家的央企过着躺平摆烂的日子成长轨迹从农村到城市的童年我家并不是西安的,只是爸妈在西安上班,从小学之后就把我接到了西安。后来老家房子拆了,爷爷奶奶也搬了过来。农村的生活,我觉...
Yki_:看哭了,恋爱那一段你女朋友说你不够关心她,可你毕竟也愿意遇到矛盾写几千字来和她慢慢分析;说不愿意给她花钱,我感觉可能只是消费观不一样;如果她想留在长沙,也应该提前跟你说开。不过她也许会心疼你放弃大厂offer转向数字马力?我也因为同样的原因有过一段幸福而充满遗憾的感情,不过跟爱情相比确实前途更重要一点。至于offer的选择,换我我也会这么选。把这些旧事记录下来以后,接下来就好好向前看吧,加油兄弟
🍊晨光随笔
点赞 评论 收藏
分享
09-29 16:59
已编辑
门头沟学院 Java
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说
投递大疆等公司10个岗位
点赞 评论 收藏
分享
渴望wlb的牛油果很...:直说卡第一学历不就行了 非得拐弯抹角
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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