题解 | #识别有效的IP地址和掩码并进行分类统计#
识别有效的IP地址和掩码并进行分类统计
https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a7435682
python3
刚开始忽略了题目中的说明,一直通过不了
说明:
import re def is_right_ip(ip): if not ip: return False pattern = re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$") mach = pattern.match(ip) if not mach: return False nums = ip.split('.') for num in nums: if int(num)<0 or int(num)>255: return False else: return True def is_right_mask(mask): if not mask: return False if mask == '0.0.0.0' or mask =='255.255.255.255': return False else: m = ''.join(map(lambda x: bin(int(x))[2:].zfill(8),mask.split('.'))) last_one = m.rfind('1') first_zero = m.find('0') if last_one > first_zero: return False else: return True def is_personal_ip(ip): if not ip: return False else: nums = ip.split('.') if int(nums[0]) == 10: return True if int(nums[0]) == 172 and 16<=int(nums[1])<=31: return True if int(nums[0]) == 192 and int(nums[1])==168: return True else: return False def is_type(ip): if not ip: return False else: nums = ip.split('.') if 1<=int(nums[0])<=126: return 'A' if 128<=int(nums[0])<=191: return 'B' if 192<=int(nums[0])<=223: return 'C' if 224<=int(nums[0])<=239: return 'D' if 240<=int(nums[0])<=255: return 'E' A,B,C,D,E,EOR,P = 0,0,0,0,0,0,0 while True: try: ip,mask = input().split('~') if not is_right_ip(ip) or not is_right_mask(mask): nums = ip.split('.') if int(nums[0]) == 0 or int(nums[0]) == 127: continue else: EOR +=1 else: if is_personal_ip(ip): P +=1 if is_type(ip) == 'A': A+=1 if is_type(ip) == 'B': B+=1 if is_type(ip) == 'C': C+=1 if is_type(ip) == 'D': D+=1 if is_type(ip) == 'E': E+=1 except: break print(f'{A} {B} {C} {D} {E} {EOR} {P}')