华为机试IP分类

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

http://www.nowcoder.com/questionTerminal/de538edd6f7e4bc3a5689723a7435682

题目描述
请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。

所有的IP地址划分为 A,B,C,D,E五类

A类地址1.0.0.0~126.255.255.255;

B类地址128.0.0.0~191.255.255.255;

C类地址192.0.0.0~223.255.255.255;

D类地址224.0.0.0~239.255.255.255;

E类地址240.0.0.0~255.255.255.255

私网IP范围是:

10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

子网掩码为二进制下前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
注意二进制下全是1或者全是0均为非法

注意:

  1. 类似于【0...*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时可以忽略
  2. 私有IP地址和A,B,C,D,E类地址是不冲突的

输入描述:
多行字符串。每行一个IP地址和掩码,用~隔开。

输出描述:
统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。

示例1
输入
复制
10.70.44.68255.254.255.0
1.0.0.1
255.0.0.0
192.168.0.2255.255.255.0
19..0.
255.255.255.0
输出
复制
1 0 1 0 0 2 1
解:

import sys
import re
a,b,c,d,e,eip,ip=0,0,0,0,0,0,0
def aa(aa):
    global eip
    for i in range(4):
        if not aa[i].isdigit():
            eip+=1
            return False
    return True
def ss(uu):
    for i in range(len(uu)-1):
        if uu[i]=="0":
            if uu[i+1]=="1":
                return False
        if i==len(uu)-2:
            if uu.startswith("0")or uu.endswith("1"):
                return False
    return True
for u in sys.stdin:
    u=re.split("[.~]",u[0:-1])
    ui=u[0:4]
    uy=u[4:]
    unn=uyy=list(map(lambda x:bin(int(x))[2:],uy))
    for i in range(4):
        if len(uyy[i])<8:
            s="".join(["0" for i in range(8-len(uyy[i]))])
            uyy[i]=s+uyy[i]
    uu="".join(uyy)
    if ss(uu):
        if aa(ui):
            if int(ui[0])>=1 and int(ui[0])<=126:
                a+=1
                if int(ui[0])==10:
                    ip+=1
            elif int(ui[0])>=128 and int(ui[0])<=191:
                b+=1
                if int(ui[0])==172 and int(ui[1])>=16 and int(ui[1])<=31:
                    ip+=1
            elif int(ui[0])>=192 and int(ui[0])<=223:
                c+=1
                if int(ui[0])==192 and int(ui[1])==168:
                    ip+=1
            elif int(ui[0])>=224 and int(ui[0])<=239:
                d+=1
            elif int(ui[0])>=240 and int(ui[0])<=255:
                e+=1
            elif int(ui[0])==0:
                continue
            else:
                eip+=1
    else:
        eip+=1
print(a,b,c,d,e,eip,ip)
全部评论
楼主,复制你的代码通不过啊
点赞 回复 分享
发布于 2021-08-18 20:44

相关推荐

不愿透露姓名的神秘牛友
07-02 17:58
点赞 评论 收藏
分享
练习生懒羊羊:开飞机把这个公司创飞吧
点赞 评论 收藏
分享
07-01 23:23
郑州大学 Java
否极泰来来来来:牛客迟早有高三的
点赞 评论 收藏
分享
就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
评论
4
3
分享

创作者周榜

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