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

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

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

import sys

def iptobin(line:str):
    ip_bin = ''
    for string in line.split('.'):
        if len(string) == 0:
            break
        ip_bin += format(int(string),'08b')
    return ip_bin

ip_cat = []
ip_cat_line = ['1.0.0.0','126.255.255.255','128.0.0.0','191.255.255.255','192.0.0.0','223.255.255.255','224.0.0.0','239.255.255.255','240.0.0.0','255.255.255.255',]
pri_ip = []
pri_ip_cat_line = ['10.0.0.0','10.255.255.255','172.16.0.0','172.31.255.255','192.168.0.0','192.168.255.255']

for ip_line in ip_cat_line:
    ip_cat.append(int(iptobin(ip_line),2))
for ip_line in pri_ip_cat_line:
    pri_ip.append(int(iptobin(ip_line),2))

count = [0]*7
for line in sys.stdin:
    ips = line.split('~')
    if ips[0].split('.')[0] in ['0','127']:
        continue
    ip1 = iptobin(ips[0])
    ip2 = iptobin(ips[1][:-1])
    if len(ip1) != 32 or '0' not in ip2 or '1' in ip2[ip2.index('0'):]:
        count[5] += 1
        continue
    ip1 = int(ip1,2)
    for i in range(5):
        if ip1 in range(ip_cat[2*i],ip_cat[2*i+1]):
            count[i] += 1
            for j in range(3):
                if ip1 in range(pri_ip[2*j],pri_ip[2*j+1]):
                    count[6] += 1
                    break
            break
for c in count:
        print(c,end=' ')

全部评论

相关推荐

11-13 14:37
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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