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