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

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

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

import sys

def valid_ip(ip):
    for s in ip:
        if len(s) == 0 or int(s) > 255 or int(s) < 0:
            return False
    return True

def valid_netmast(netmask):
    string = ""
    for s in netmask:
        if len(s) == 0 or int(s) > 255 or int(s) < 0:
            return False
        string += "{:08b}".format(int(s))
    # 从右往左找1的索引,从左往右找0的索引
    pos_one, pos_zero = string.rfind('1'), string.find('0')
    return pos_zero - pos_one == 1

A, B, C, D, E, error, private = 0, 0, 0, 0, 0, 0, 0

for line in sys.stdin:
    line = line.split("~")
    ip = line[0].split(".")
    netmask = line[1].split(".")
    # 需要忽略的ip地址
    if int(ip[0]) == 127 or int(ip[0]) == 0:
        continue
    # 判断是否合法
    if not valid_ip(ip) or not valid_netmast(netmask):
        error += 1
        continue
    # 按照A/B/C/D/E类地址归类
    if int(ip[0]) <= 126:
        A +=1
    elif int(ip[0]) <= 191:
        B += 1
    elif int(ip[0]) <= 223:
        C += 1
    elif int(ip[0]) <= 239:
        D += 1
    elif int(ip[0]) <= 255:
        E += 1
    # 判断私网IP
    if int(ip[0]) == 10:
        private += 1
    elif int(ip[0]) == 172 and 16 <= int(ip[1]) <= 31:
        private += 1
    elif int(ip[0]) == 192 and int(ip[1]) == 168:
        private += 1
    
print("{} {} {} {} {} {} {}".format(A, B, C, D, E, error, private))

全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务