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


