题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
import sys
bins1 = [int('10000000', 2), int('11000000', 2), int('11100000', 2), int('11110000', 2), int('11111000', 2), int('11111100', 2), int('11111110', 2), int('11111111', 2)]
bins = [int('00000000', 2), int('10000000', 2), int('11000000', 2), int('11100000', 2), int('11110000', 2), int('11111000', 2), int('11111100', 2), int('11111110', 2), int('11111111', 2)]
bins2 = [int('00000000', 2), int('10000000', 2), int('11000000', 2), int('11100000', 2), int('11110000', 2), int('11111000', 2), int('11111100', 2), int('11111110', 2)]
def check(net):
each = net.split('.')
if each[0] == '' or each[1] == '' or each[2] == '' or each[3] == '':
return False
else:
if int(each[0]) in bins1 and int(each[1]) == 0 and int(each[2]) == 0 and int(each[3]) == 0:
return True
elif int(each[0]) == 255 and int(each[1]) in bins and int(each[2]) == 0 and int(each[3]) == 0:
return True
elif int(each[0]) == 255 and int(each[1]) == 255 and int(each[2]) in bins and int(each[3]) == 0:
return True
elif int(each[0]) == 255 and int(each[1]) == 255 and int(each[2]) == 255 and int(each[3]) in bins2:
return True
else:
return False
ips = []
nets = []
for line in sys.stdin:
ip, net = line.split("~")
ips.append(ip)
nets.append(net[:-1])
i = -1
A, B, C, D, E, R, P = 0, 0, 0, 0, 0, 0, 0
for ip in ips:
i += 1
each = ip.split(".")
if each[0] == '' or each[1] == '' or each[2] == '' or each[3] == '':
R += 1
else:
if int(each[0]) >= 1 and int(each[0]) <= 126:
if check(nets[i]):
A += 1
else:
R += 1
elif int(each[0]) >= 128 and int(each[0]) <= 191:
if check(nets[i]):
B += 1
else:
R += 1
elif int(each[0]) >= 192 and int(each[0]) <= 223:
if check(nets[i]):
C += 1
else:
R += 1
elif int(each[0]) >= 224 and int(each[0]) <= 239:
if check(nets[i]):
D += 1
else:
R += 1
elif int(each[0]) >= 240 and int(each[0]) <= 255:
if check(nets[i]):
E += 1
else:
R += 1
if (
int(each[0]) == 10
or (int(each[0]) == 172 and int(each[1]) >= 16 and int(each[1]) <= 31)
or (int(each[0]) == 192 and int(each[1]) == 168)
):
if check(nets[i]):
P += 1
print(f'{A} {B} {C} {D} {E} {R} {P}')

查看8道真题和解析