题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
import sys def valid_ip(ip): for s in ip: if len(s) == 0 or int(s) > 255 or int(s) < 0: return False return True def valid_netmast(netmask): string = "" for s in netmask: if len(s) == 0 or int(s) > 255 or int(s) < 0: return False string += "{:08b}".format(int(s)) # 从右往左找1的索引,从左往右找0的索引 pos_one, pos_zero = string.rfind('1'), string.find('0') return pos_zero - pos_one == 1 A, B, C, D, E, error, private = 0, 0, 0, 0, 0, 0, 0 for line in sys.stdin: line = line.split("~") ip = line[0].split(".") netmask = line[1].split(".") # 需要忽略的ip地址 if int(ip[0]) == 127 or int(ip[0]) == 0: continue # 判断是否合法 if not valid_ip(ip) or not valid_netmast(netmask): error += 1 continue # 按照A/B/C/D/E类地址归类 if int(ip[0]) <= 126: A +=1 elif int(ip[0]) <= 191: B += 1 elif int(ip[0]) <= 223: C += 1 elif int(ip[0]) <= 239: D += 1 elif int(ip[0]) <= 255: E += 1 # 判断私网IP if int(ip[0]) == 10: private += 1 elif int(ip[0]) == 172 and 16 <= int(ip[1]) <= 31: private += 1 elif int(ip[0]) == 192 and int(ip[1]) == 168: private += 1 print("{} {} {} {} {} {} {}".format(A, B, C, D, E, error, private))