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

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

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

import sys
res = [0]*7
def func1(ip): # a-e 0-4
    if 1 <= ip[0] <= 126:
        res[0] += 1
    elif 128 <= ip[0] <= 191:
        res[1] += 1
    elif 192 <= ip[0] <= 223:
        res[2] += 1
    elif 224 <= ip[0] <= 239:
        res[3] += 1
    elif 240 <= ip[0] <= 255:
        res[4] += 1

def func2(ip):# 不合法
    if ip[0] == 10 or ip[0] == 127 or ip[0] == 192 and ip[1] == 168:
        res[6] += 1
    
def func3(ip):
    return ip[0] == 0 or ip[0] == 127
        

def func4(ip): # 掩码
    val = (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3]
    val = bin(val)[2:]
    index_0 = val.find('0')
    index_1 = val.rfind('1')
    if index_0 == -1 or index_1 == -1 or index_0 - index_1 != 1:
        res[5] += 1
        return False
    return True

def func5(line):
    ip, msk = line.split('~')
    ip = [int(x) for x in filter(None, ip.split('.'))]
    msk = [int(x) for x in filter(None, msk.split('.'))]

    if len(ip) < 4 or len(msk) < 4:
        res[5] += 1
        return 
    if func3(msk) or func3(ip):
        return
    if func4(msk):
        func1(ip)
        func2(ip)


for line in sys.stdin:  # 读取每一行输入  
    func5(line)  
print(*res)







全部评论

相关推荐

今天 10:31
门头沟学院 Java
求问各位大佬,笔试都考点啥
投递科大讯飞等公司10个岗位
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
07-18 18:05
门头沟学院 Java
挂了&nbsp;正式批求捞
投递滴滴等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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