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

全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务