题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
def check_mask(mask): # -1非法 1合法 # 掩码 if check_ip(mask) == -1: return -1 if mask in ["255.255.255.255", "0.0.0.0"]: return -1 mask_sp = mask.split('.') if len(mask_sp) !=4: return -1 temp_s = "" for m in mask_sp: temp_s += bin(int(m))[2:].rjust(8,'0') # "0b001" 去掉0b 补齐八位 # 1111000 if temp_s[temp_s.index('0'):].count('1') != 0: return -1 return 1 def check_ip(ip): ip_sp = ip.split('.') if len(ip_sp) != 4 or '' in ip_sp: return -1 for i in ip_sp: if int(i) < 0 or int(i) > 255: return -1 return 1 error = 0 private = 0 kind_ct = [0, 0, 0, 0, 0] while True: try: ip, mask = input().split('~') if ip.split('.')[0] in ['0','127']: continue elif check_ip(ip) == -1 or check_mask(mask) == -1: error += 1 elif check_ip(ip) == 1 and check_mask(mask) == 1: ip_sp = list(map(int, ip.split('.'))) if ip_sp[0] <= 126: kind_ct[0] += 1 elif ip_sp[0] <= 191: kind_ct[1] += 1 elif ip_sp[0] <= 223: kind_ct[2] += 1 elif ip_sp[0] <= 239: kind_ct[3] += 1 elif ip_sp[0] <= 255: kind_ct[4] += 1 if ip_sp[0] == 10: private += 1 elif ip_sp[0] == 172 and 16 <= ip_sp[1] <= 32: private += 1 elif ip_sp[0] == 192 and ip_sp[1] == 168: private += 1 except: break out = kind_ct + [error] + [private] for n in out: print(n, end=" ")